基于Zookeeper搭建Kafka高可用集群
拷贝三份 zookeeper 安装包。分别进入安装目录的 conf 目录,拷贝配置样本 zoo_sample.cfg 为 zoo.cfg 并进行修改,修改后三份配置文件内容分别如下:
zookeeper01 配置:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/01 dataLogDir=/usr/local/zookeeper-cluster/log/01 clientPort=2181 # server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里 # 指名集群间通讯端口和选举端口 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
如果是多台服务器,则集群中每个节点通讯端口和选举端口可相同,IP 地址修改为每个节点所在主机 IP 即可。
zookeeper02 配置,与 zookeeper01 相比,只有 dataLogDir、dataLogDir 和 clientPort 不同:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/02 dataLogDir=/usr/local/zookeeper-cluster/log/02 clientPort=2182 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
zookeeper03 配置,与 zookeeper01,02 相比,也只有 dataLogDir、dataLogDir 和 clientPort 不同:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper-cluster/data/03 dataLogDir=/usr/local/zookeeper-cluster/log/03 clientPort=2183 server.1=127.0.0.1:2287:3387 server.2=127.0.0.1:2288:3388 server.3=127.0.0.1:2289:3389
- tickTime:用于计算的基础时间单元。比如 session 超时:N*tickTime;
- initLimit:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
- syncLimit:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
- dataDir:数据存储位置;
- dataLogDir:日志目录;
- clientPort:用于客户端连接的端口,默认 2181
分别启动三个节点:
# 启动节点1 /usr/app/zookeeper-cluster/zookeeper01/bin/zkServer.sh start # 启动节点2 /usr/app/zookeeper-cluster/zookeeper02/bin/zkServer.sh start # 启动节点3 /usr/app/zookeeper-cluster/zookeeper03/bin/zkServer.sh start
Kafka集群搭建
进入解压目录的 config 目录下 ,拷贝三份配置文件:
# cp server.properties server-1.properties # cp server.properties server-2.properties # cp server.properties server-3.properties
分别修改三份配置文件中的部分配置,如下:
server-1.properties:
# The id of the broker. 集群中每个节点的唯一标识 broker.id=0 # 监听地址 listeners=PLAINTEXT://hadoop001:9092 # 数据的存储位置 log.dirs=/usr/local/kafka-logs/00 # Zookeeper连接地址 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
server-2.properties:
broker.id=1 listeners=PLAINTEXT://hadoop001:9093 log.dirs=/usr/local/kafka-logs/01 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
server-3.properties:
broker.id=2 listeners=PLAINTEXT://hadoop001:9094 log.dirs=/usr/local/kafka-logs/02 zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
分别指定不同配置文件,启动三个 Kafka 节点。启动后可以使用 jps 查看进程,此时应该有三个 zookeeper 进程和三个 kafka 进程。
bin/kafka-server-start.sh config/server-1.properties bin/kafka-server-start.sh config/server-2.properties bin/kafka-server-start.sh config/server-3.properties
创建测试主题:
bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 \ --replication-factor 3 \ --partitions 1 --topic my-topic
可以使用以下命令查看创建的主题信息:
bin/kafka-topics.sh --describe --bootstrap-server hadoop001:9092 --topic my-replicated-topic

可以看到分区 0 的有 0,1,2 三个副本,且三个副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 为首领副本,此时代表集群已经搭建成功。
查看所有TOPIC的命令
[root@node_slave_one kafka]# bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list
立志如山 静心求实
浙公网安备 33010602011771号