基于Zookeeper搭建Kafka高可用集群
本文于2079天之前发表,文中内容可能已经过时。
一、Zookeeper集群搭建
为保证集群高可用,Zookeeper集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。
1.1 下载 & 解压
下载对应版本Zookeeper,这里我下载的版本3.4.14
。官方下载地址:https://archive.apache.org/dist/zookeeper/
1 | # 下载 |
1.2 修改配置
拷贝三份zookeeper安装包。分别进入安装目录的conf
目录,拷贝配置样本zoo_sample.cfg
为zoo.cfg
并进行修改,修改后三份配置文件内容分别如下:
zookeeper01配置:
1 | tickTime=2000 |
如果是多台服务器,则集群中每个节点通讯端口和选举端口可相同,IP地址修改为每个节点所在主机IP即可。
zookeeper02配置,与zookeeper01相比,只有dataLogDir
和dataLogDir
不同:
1 | tickTime=2000 |
zookeeper03配置,与zookeeper01,02相比,也只有dataLogDir
和dataLogDir
不同:
1 | tickTime=2000 |
配置参数说明:
- tickTime:用于计算的基础时间单元。比如session超时:N*tickTime;
- initLimit:用于集群,允许从节点连接并同步到 master节点的初始化连接时间,以tickTime的倍数来表示;
- syncLimit:用于集群, master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
- dataDir:数据存储位置;
- dataLogDir:日志目录;
- clientPort:用于客户端连接的端口,默认2181
1.3 标识节点
分别在三个节点的数据存储目录下新建myid
文件,并写入对应的节点标识。Zookeeper集群通过myid
文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出leader节点。
创建存储目录:
1 | # dataDir |
创建并写入节点标识到myid
文件:
1 | #server1 |
1.4 启动集群
分别启动三个节点:
1 | # 启动节点1 |
1.5 集群验证
使用jps查看进程,并且使用zkServer.sh status
查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为follower节点,一个节点为leader节点。

二、Kafka集群搭建
2.1 下载解压
Kafka安装包官方下载地址:http://kafka.apache.org/downloads ,本用例下载的版本为2.2.0
,下载命令:
1 | # 下载 |
这里j解释一下kafka安装包的命名规则:以
kafka_2.12-2.2.0.tgz
为例,前面的2.12代表Scala的版本号(Kafka采用Scala语言进行开发),后面的2.2.0则代表Kafka的版本号。
2.2 拷贝配置文件
进入解压目录的 config
目录下 ,拷贝三份配置文件:
1 | # cp server.properties server-1.properties |
2.3 修改配置
分别修改三份配置文件中的部分配置,如下:
server-1.properties:
1 |
|
server-2.properties:
1 | broker.id=1 |
server-3.properties:
1 | broker.id=2 |
这里需要说明的是log.dirs
指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的log4j.properties
进行配置的。
2.4 启动集群
分别指定不同配置文件,启动三个Kafka节点。启动后可以使用jps查看进程,此时应该有三个zookeeper进程和三个kafka进程。
1 | bin/kafka-server-start.sh config/server-1.properties |
2.5 创建测试主题
创建测试主题:
1 | bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 \ |
创建后可以使用以下命令查看创建的主题信息:
1 | bin/kafka-topics.sh --describe --bootstrap-server hadoop001:9092 --topic my-replicated-topic |

可以看到分区0的有0,1,2三个副本,且三个副本都是可用副本,都在ISR(in-sync Replica 同步副本)列表中,其中1为首领副本,此时代表集群已经搭建成功。