搭建 Kafka 高可用集群(二),3台机器,3分区测试高可用集群

发布时间:2021-05-15作者:laosun阅读(1643)

搭建

搭建 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

    image.png


    之后我们所有的操作都在 /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个文件夹。

    image.png

    # 我们查看一下集群信息
    > 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

    image.png

    主题为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都已经同步完成。

    image.png

    我们再发送一次,继续进行观察本地文件的变化。

    我这边测试消息发往了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

    image.png

    我们发现13机器已经从Isr中剔除,原来分区2的leader是存储在13这台机器上,现在也变成了12机器。


    下一篇文章将介绍 Kafka-SpringBoot Demo 测试


1 +1

版权声明

 开源  工具  kafka

 请文明留言

0 条评论