https://blog.csdn.net/wudidahuanggua/article/details/127086186

1 安装准备

  请确保zookeeper集群的正常启动

  可参考:大数据学前准备--zookeeper详解与集群搭建(保姆级教程)

 

2 下载kafka

Apache Kafka

上传kafka至node001节点

 

3 安装

3.1 解压

tar -zxvf kafka_2.12-3.2.3.tgz 

 

3.2 改名

mv /opt/kafka_2.12-3.2.3/ /opt/kafka

 

3.3 修改配置文件

  修改前先备份一份

  使用如下配置覆盖原先的配置

vim /opt/kafka/config/server.properties

 

# 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
broker.id=1
# 套接字服务器监听的地址。如果没有配置,主机名将等于的值
listeners=PLAINTEXT://192.168.1.101:9092
# 当前kafka对外提供服务的端口默认是9092
port=9092
# 这个是borker进行网络处理的线程数
num.network.threads=3
# 这个是borker进行I/O处理的线程数
num.io.threads=8
# 发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes=102400
# kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes=102400
# 这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
socket.request.max.bytes=104857600
# 消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
log.dirs=/opt/kafka/log/kafka-logs
# 默认的分区数,一个topic默认1个分区数
num.partitions=1
# 每个数据目录用来日志恢复的线程数目
num.recovery.threads.per.data.dir=1
# 默认消息的最大持久化时间,168小时,7天
log.retention.hours=168
# 这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.segment.bytes=1073741824
# 每隔300000毫秒去检查上面配置的log失效时间
log.retention.check.interval.ms=300000
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
# 设置zookeeper的连接端口
zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
# 设置zookeeper的连接超时时间
zookeeper.connection.timeout.ms=6000

 

3.4 创建server.properties配置文件中的日志存放目录

mkdir -p /opt/kafka/log

 

3.5 配置文件producer.properties

vim /opt/kafka/config/producer.properties

  末行加入

metadata.broker.list=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181

 

3.6 配置文件consumer.properties

vim /opt/kafka/config/consumer.properties

  末行加入

zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181

 

3.7 环境变量配置

vim /etc/profile

  末行加入

export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin

  刷新配置

source /etc/profile

 

4 分发文件至node002与node003节点

4.1 分发(拷贝)kafka

scp -r /opt/kafka/ node002:/opt/     # 分发至node002节点

scp -r /opt/kafka/ node003:/opt/     # 分发至node003节点

 

4.2 配置环境变量

  同node1的配置,对node2和node3进行环境变量配置

 

5 修改node2和node3配置文件

  修改node002与node003的server.properties配置文件

  将node002中server.properties的broker.id修改为2

  将node003中server.properties的broker.id修改为3

  将node002中server.properties的listeners修改为192.168.1.102:9092

  将node003中server.properties的listeners修改为192.168.1.103:9092

 

6 启动

6.1 先启动zookeeper集群

  三台节点都输入:zkServer.sh start

  再通过zkServer.sh status查看启动情况

 

6.2 启动Kafka

  三台节点执行

kafka-server-start.sh /opt/kafka/config/server.properties

 

7 Kafka在zookeeper中存储结构图

 

7.1 topic注册信息

/brokers/topics/[topicName] :
存储某个topic的partitions所有分配信息

  我们输入zkCli.sh进入zookeeper客户端

  使用:get /brokers/topics/topic-test

 

7.2 partition状态信息

/brokers/topics/[topicName]/partitions/[0...N] 其中[0..N]表示partition索引号
/brokers/topics/[topicName]/partitions/[partitionId]/state

 

"controller_epoch": 表示kafka集群中的中央控制器选举次数,
"leader": 表示该partition选举leader的brokerId,
"version": 版本编号默认为1,
"leader_epoch": 该partition leader选举次数,
"isr": [同步副本组brokerId列表]

 

7.3 Broker注册信息

/brokers/ids/[0...N]                 
每个broker的配置文件中都需要指定一个数字类型的id(全局不可重复),此节点为临时znode(EPHEMERAL)

"jmx_port": jmx端口号,
"timestamp": kafka broker初始启动时的时间戳,
"host": 主机名或ip地址,
"version": 版本编号默认为1,
"port": kafka broker的服务端端口号,由server.properties中参数port确定

 

7.4 Controller epoch

/controller_epoch --> int (epoch)
此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1;

 

7.5 Controller注册信息

/controller -> int (broker id of the controller)  存储center controller中央控制器所在kafka broker的信息

"version": 版本编号默认为1,
"brokerid": kafka集群中broker唯一编号,
"timestamp": kafka broker中央控制器变更时的时间戳