发布时间:2021-05-15作者:laosun阅读(1516)
搭建 Kafka 高可用集群,搭建 Kafka 高可用集群,3台机器,3分区测试高可用集群。
kafka安装和配置方式请看文章: 搭建 Kafka 高可用集群(一)之 单台搭建(图文案例)
建议观看此篇文章的人,先看一下上篇文章,有些地方可能会漏介绍。
上一篇文章我们介绍了如何搭建单台非高可用的kafka案例测试。本篇文章我们将继续使用图文案例为大家讲解如何搭建3分区高可用集群。
三台机器均是虚拟机。ip为:10.211.55.11、10.211.55.12、10.211.55.13
首先我们需要在三台机器的kafka根目录下分别创建文件目录:kafka-logs 和 zookeeper
之后我们所有的操作都在 /usr/local/kafka_2.12-2.8.0 目录下
配置文件修改
分别修改三台机器上的 zookeeper.properties 配置文件。vim config/zookeeper.properties
# 分别修改数据存储目录 dataDir=/usr/local/kafka_2.12-2.8.0/zookeeper # 分别增加如下几行 tickTime=2000 initLimit=10 syncLimit=5 # 然后添加这三个 server.1=10.211.55.11:2888:3888 server.2=10.211.55.12:2888:3888 server.3=10.211.55.13:2888:3888
三台服务器配置内容一致,需要在dataDir目录下创建myid文件,文件的内容必须与zookeeper.properties中的server.x编号保持一致
# 10.211.55.11 机器上 > echo 1 > zookeeper/myid # 10.211.55.12 机器上 > echo 2 > zookeeper/myid # 10.211.55.13 机器上 > echo 3 > zookeeper/myid
分别修改三台机器上的 server.properties 配置文件。vim config/server.properties
# 10.211.55.11 机器 # 为了方便识别,我们修改成和ip对应的编号(只能使用数字),此处我使用的10.211.55.11这台机器,那么修改成如下 broker.id=11 # 使listeners生效,配置如下(kafka服务ip和服务端口为9092,记下来) listeners=PLAINTEXT://10.211.55.11:9092 # 数据文件存储目录 log.dirs=/usr/local/kafka_2.12-2.8.0/kafka-logs # 分区数我们设置为3,因为是三台机器,设置多了也没啥用 num.partitions=3 # 副本集我们设置为3,一个leader,两个follow offsets.topic.replication.factor=3 # 修改zookeeper服务地址(记得是三台都需要配置,并且以逗号,分隔,不是分号) zookeeper.connect=10.211.55.11:2181,10.211.55.12:2181,10.211.55.13:2181
# 10.211.55.12 机器 # 为了方便识别,我们修改成和ip对应的编号(只能使用数字),此处我使用的10.211.55.12这台机器,那么修改成如下 broker.id=12 # 使listeners生效,配置如下(kafka服务ip和服务端口为9092,记下来) listeners=PLAINTEXT://10.211.55.12:9092 # 数据文件存储目录 log.dirs=/usr/local/kafka_2.12-2.8.0/kafka-logs # 分区数我们设置为3,因为是三台机器,设置多了也没啥用 num.partitions=3 # 副本集我们设置为3,一个leader,两个follow offsets.topic.replication.factor=3 # 修改zookeeper服务地址(记得是三台都需要配置,并且以逗号,分隔,不是分号) zookeeper.connect=10.211.55.11:2181,10.211.55.12:2181,10.211.55.13:2181
# 10.211.55.13 机器 # 为了方便识别,我们修改成和ip对应的编号(只能使用数字),此处我使用的10.211.55.13这台机器,那么修改成如下 broker.id=12 # 使listeners生效,配置如下(kafka服务ip和服务端口为9092,记下来) listeners=PLAINTEXT://10.211.55.13:9092 # 数据文件存储目录 log.dirs=/usr/local/kafka_2.12-2.8.0/kafka-logs # 分区数我们设置为3,因为是三台机器,设置多了也没啥用 num.partitions=3 # 副本集我们设置为3,一个leader,两个follow offsets.topic.replication.factor=3 # 修改zookeeper服务地址(记得是三台都需要配置,并且以逗号,分隔,不是分号) zookeeper.connect=10.211.55.11:2181,10.211.55.12:2181,10.211.55.13:2181
配置文件我们都修改完毕。
启动服务
# 三台机器分别启动zookeeper服务,建议新手控制台启动先观察一下,如果能正常启动成功,再使用后台启动即可 # 控制台启动(启动成功后没问题,按住ctrl+c退出) # 启动的时候控制台会报错,拒绝连接,没关系,这是因为另外两台机器没有启动的原因 > sh bin/zookeeper-server-start.sh config/zookeeper.properties # 后台启动 > nohup sh bin/zookeeper-server-start.sh config/zookeeper.properties & # 三台机器分别启动kafka-server服务(后台启动) > nohup sh bin/kafka-server-start.sh config/server.properties & # 最后记得使用我们使用ps或者jps查看下进程,是否都启动成功
创建topic主题
# 创建topic主题 # 方式1 创建 sunjs 主题(指定 kafka server 服务进行创建) - 3分区3副本 > sh bin/kafka-topics.sh --create --bootstrap-server 10.211.55.11:9092,10.211.55.12:9092,10.211.55.13:9092 --replication-factor 3 --partitions 3 --topic sunjs # 方式2 创建 sunjs2 主题(指定 zookeeper 服务进行创建) > sh bin/kafka-topics.sh --create --zookeeper 10.211.55.11:2181,10.211.55.12:2181,10.211.55.13:2181 --replication-factor 3 --partitions 3 --topic sunjs2 # 查看主题(此处应该存在sunjs和sunjs2两个主题) > sh bin/kafka-topics.sh --list --zookeeper 10.211.55.11:2181,10.211.55.12:2181,10.211.55.13:2181 # 查看是否创建了本地存储文件 > ll kafka-logs/ # 我们可以看到分别创建了6个文件夹 sunjs 三个 和 sunjs2 三个
三台机器上都分别创建了这6个文件夹。
# 我们查看一下集群信息 > sh bin/kafka-topics.sh --describe --bootstrap-server 10.211.55.11:9092,10.211.55.12:9092,10.211.55.13:9092 --topic sunjs
主题为sunjs的0号分区,leader在10.211.55.11这台机器上,follow在13和12两台机器。
主题为sunjs的1号分区,leader在10.211.55.13这台机器上,follow在11和12两台机器。
主题为sunjs的3号分区,leader在10.211.55.12这台机器上,follow在11和13两台机器。
启动生产者和消费者
# 启动自带模拟生产者,准备向test主题发送消息,我们执行完后,窗口卡顿在了 > ,因为是等待输入消息,我们再先创建个消费者 > sh bin/kafka-console-producer.sh --broker-list 10.211.55.11:9092,10.211.55.12:9092,10.211.55.13:9092 --topic sunjs # 启动自带模拟消费者(新开shell窗口),我们执行完后,窗口同样处于等待输出的状态。 如果我们在命令行后增加 --from-beginning,则表示生产过的所有消息全部进行消费一遍 > sh bin/kafka-console-consumer.sh --bootstrap-server 10.211.55.11:9092,10.211.55.12:9092,10.211.55.13:9092 --topic sunjs # 此时我们在生产者处随便输入一些消息,消费者窗口则会相应的输出消息
我们发送个数字消息 1 ,来测试下本地文件的存储变化。
我这边测试发送到了sunjs-2分区,并且另外两台机器的follow都已经同步完成。
我们再发送一次,继续进行观察本地文件的变化。
我这边测试消息发往了sunjs-1分区,并且另外两台机器的follow都已经同步完成。
继续测试,那么消息肯定会发到sunjs-0分区。这里就不再测试了,现在我们让其中一台机器13宕机。继续观察一下。
# 查看主题有什么变化 > sh bin/kafka-topics.sh --describe --bootstrap-server 10.211.55.11:9092,10.211.55.12:9092,10.211.55.13:9092 --topic sunjs
我们发现13机器已经从Isr中剔除,原来分区2的leader是存储在13这台机器上,现在也变成了12机器。
下一篇文章将介绍 Kafka-SpringBoot Demo 测试
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/d94cdf610bd04bba8b6a08f813fb873a.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。