一【介绍】
Kafka 是一个分布式的、可水平扩展的、基于发布/订阅模式的、支持容错的消息系统。

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

LogKIm 一站式Apache Kafka集群指标监控与运维管控平台, 滴滴开源产品,用于kafka运维管控/监控告警/资源治理等核心场景。

github:https://github.com/didi/LogiKM

二【部署】

此处仅介绍部署流程。

选择3台服务器,作为node1 node2 node3 3个节点作为分布式支持。

node1 192.168.1.1
node2 192.168.1.2
node3 192.168.1.3

2.1 安装zookeeper 集群

node1 执行:

docker run -tid --name=zk-1 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=1 -e ZOO_SERVERS="server.1=0.0.0.0:2888:3888;2181 server.2=192.168.1.2:2888:3888;2181 server.3=192.168.1.3:2888:3888;2181" -v /data/kafka_cluster/zookeeper/data:/data zookeeper:latest

node 2执行:

docker run -tid --name=zk-2 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=2 -e ZOO_SERVERS="server.1=192.168.1.1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=192.168.1.3:2888:3888;2181" -v /data/kafka_cluster/zookeeper/data:/data zookeeper:latest

node 3执行:

docker run -tid --name=zk-3 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=3 -e ZOO_SERVERS="server.1=192.168.1.1:2888:3888;2181 server.2=192.168.1.2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" -v /data/kafka_cluster/zookeeper/data:/data zookeeper:latest

判断zookeeper 的节点状态

docker exec -it zk-1  bash ./bin/zkServer.sh status

结果集:

Mode: leader ## 主选举节点

Mode: follower  ## 从选举节点

2.2 安装 kafka 集群

node1 执行:

docker run -itd --name=kafka-01 --restart=always --net=host --privileged=true -v /etc/hosts:/etc/hosts -v /data/kafka_cluster/kafka/data:/kafka/kafka-logs-data-1 -v /data/kafka_cluster/kafka/logs:/opt/kafka/logs -e KAFKA_ADVERTISED_HOST_NAME=192.168.1.1 -e HOST_IP=192.168.1.1 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181 -e KAFKA_BROKER_ID=0 wurstmeister/kafka

node 2执行:

`docker run -itd --name=kafka-02 --restart=always --net=host --privileged=true -v /etc/hosts:/etc/hosts -v /data/kafka_cluster/kafka/data:/kafka/kafka-logs-data-2 -v /data/kafka_cluster/kafka/logs:/opt/kafka/logs -e KAFKA_ADVERTISED_HOST_NAME=192.168.1.2 -e HOST_IP=192.168.1.2 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181 -e KAFKA_BROKER_ID=1` wurstmeister/kafka

node 3执行:

`docker run -itd --name=kafka-03 --restart=always --net=host --privileged=true -v /etc/hosts:/etc/hosts -v /data/kafka_cluster/kafka/data:/kafka/kafka-logs-data-3 -v /data/kafka_cluster/kafka/logs:/opt/kafka/logs -e KAFKA_ADVERTISED_HOST_NAME=192.168.1.3 -e HOST_IP=192.168.1.3 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181 -e KAFKA_BROKER_ID=2`  wurstmeister/kafka

2.3 安装LogKim

基于https://github.com/didi/LogiKM/blob/master/Dockerfile

封装docker 镜像包:

kafka-manager:1.0.0

启动执行:

docker run -d -p 8080:8080 -p 10000:9999 --restart=always --name kafka-manager-logkim -e  JAVA_AGENT="-javaagent:/opt/agent/jmx_prometheus_javaagent-0.15.0.jar=9999:/opt/agent/config.yaml" -e PARAMS="--spring.datasource.kafka-manager.jdbc-url=jdbc:mysql://192.168.1.1:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8 --spring.datasource.kafka-manager.username=*** --spring.datasource.kafka-manager.password=****" kafka-manager:1.0.0

三【优化】

文档:https://github.com/didi/LogiKM/blob/master/docs/user_guide/faq.md

3.1 调整kafka 集群node 节点上的 jmx 端口

docker exec -it kafka-01 bash 
 vi /opt/kafka_2.13-2.8.1/bin/kafka-run-class.sh  

###调整端口号,调整kafka ip

#配置jmx_Port

JMX_PORT=19999

JMX settings

if [ -z "$KAFKA_JMX_OPTS" ]; then                                
  KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.rmi.port=19999 -Djava.rmi.server.hostname=192.168.1.1 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.ssl=false "
                                          
fi 
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐