稷然如此

  • 首页
  • 文章分类
    • AI
    • Android
    • Java
    • Shell
    • Vue
    • C#
    • Python
    • 数据库
    • 组件
    • 其他
    • Game
  • 常用命令
    • Docker
    • Git
    • Linux
  • 操作系统
    • CentOS
    • Ubuntu
    • Windows
    • Kylin
  • 工具
    • IntelliJ IDEA
    • Visual Studio Code
稷然如此
不积跬步,无以至千里
  1. 首页
  2. 操作系统
  3. CentOS
  4. 正文

Docker 部署 Kafka + zookeeper 集群

2024年8月5日 795点热度 0人点赞

1、准备工作

涉及4台主机 docker :
主机名称IP地址部署服务
master192.168.67.200zookeepr + kafka
cluster1192.168.67.201zookeepr + kafka
cluster2192.168.67.202zookeepr + kafka
cluster3192.168.67.203zookeepr + kafka

2、关闭防火墙

集群所有节点都需要改。
查看防火墙状态:
systemctl status firewalld
停止防火墙:
sudo systemctl stop firewalld
禁用防火墙:
sudo systemctl disable firewalld
当然,也可以防火墙对指定端口放行。

3、拉取 zookeeper 镜像

集群节点机器分别拉取,版本为:3.7.0
docker pull zookeeper

4、运行 zookeeper 容器

master 执行启动容器命令:
docker run -d --restart=always \
--name zookeeper-master \
--network host \
-e ZOO_MY_ID=1 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.67.200:2888:3888 server.2=192.168.67.201:2888:3888 server.3=192.168.67.202:2888:3888 server.4=192.168.67.203:2888:3888" \
-t zookeeper
cluster1 启动容器命令:
docker run -d --restart=always \
--name zookeeper-cluster1 \
--network host \
-e ZOO_MY_ID=2 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.67.200:2888:3888 server.2=192.168.67.201:2888:3888 server.3=192.168.67.202:2888:3888 server.4=192.168.67.203:2888:3888" \
-t zookeeper
cluster2 启动容器命令:
docker run -d --restart=always \
--name zookeeper-cluster2 \
--network host \
-e ZOO_MY_ID=3 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.67.200:2888:3888 server.2=192.168.67.201:2888:3888 server.3=192.168.67.202:2888:3888 server.4=192.168.67.203:2888:3888" \
-t zookeeper
cluster3 启动容器命令:
docker run -d --restart=always \
--name zookeeper-cluster3 \
--network host \
-e ZOO_MY_ID=4 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.67.200:2888:3888 server.2=192.168.67.201:2888:3888 server.3=192.168.67.202:2888:3888 server.4=192.168.67.203:2888:3888" \
-t zookeeper
参数解释:
-e ZOO_MY_ID:集群中每个节点的唯一标识
-e ZOO_SERVERS:zookeeper 集群的连接信息,其中的clientPort=2181为指定监听端口,zookeeper 为集群时,用空格分隔且用半角双引号""包裹
由以上命令创建的 zoo.cfg 配置如下:
进入容器,查看状态
docker exec -it 容器id bash
进入 bin 目录:
cd bin/
查看状态:
./zkServer.sh status
注意:
如果出现这种错误提示:Error contacting service. It is probably not running。说明目前集群只是单节点模式,因为只启动了一台集群节点,需要3台以上节点才可以形成集群。
正常集群效果:
通过8080访问状态:
http://192.168.67.200:8080/commands/stat

5、拉取 kafka 镜像

集群节点机器分别拉取
docker pull wurstmeister/kafka

6、运行  kafka 容器

master 启动容器命令:
docker run -d --restart=always \
--name kafka-master \
--network host \
-p 9092:9092 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT="192.168.67.200:2181,192.168.67.201:2181,192.168.67.202:2181,192.168.67.203:2181" \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.67.200:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_CFG_NUM_PARTITIONS=3 \
-e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
-t wurstmeister/kafka
cluster1 启动容器命令:
docker run -d --restart=always \
--name kafka-cluster1 \
--network host \
-p 9092:9092 \
-e KAFKA_BROKER_ID=2 \
-e KAFKA_ZOOKEEPER_CONNECT="192.168.67.200:2181,192.168.67.201:2181,192.168.67.202:2181,192.168.67.203:2181" \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.67.201:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_CFG_NUM_PARTITIONS=3 \
-e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
-t wurstmeister/kafka
cluster2 启动容器命令:
docker run -d --restart=always \
--name kafka-cluster2 \
--network host \
-p 9092:9092 \
-e KAFKA_BROKER_ID=3 \
-e KAFKA_ZOOKEEPER_CONNECT="192.168.67.200:2181,192.168.67.201:2181,192.168.67.202:2181,192.168.67.203:2181" \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.67.202:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_CFG_NUM_PARTITIONS=3 \
-e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
-t wurstmeister/kafka
cluster3 启动容器命令:
docker run -d --restart=always \
--name kafka-cluster3 \
--network host \
-p 9092:9092 \
-e KAFKA_BROKER_ID=4 \
-e KAFKA_ZOOKEEPER_CONNECT="192.168.67.200:2181,192.168.67.201:2181,192.168.67.202:2181,192.168.67.203:2181" \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.67.203:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-e KAFKA_CFG_NUM_PARTITIONS=3 \
-e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
-t wurstmeister/kafka
参数解释:
-e KAFKA_BROKER_ID=0:Broker 集群中每个节点的唯一标识
-e KAFKA_ZOOKEEPER_CONNECT:zookeeper 集群的连接信息,Kafka 使用 zookeeper 管理集群元数据,zookeeper 为集群时,用逗号分隔且用半角双引号""包裹
-e ALLOW_PLAINTEXT_LISTENER:允许明文监听
-e KAFKA_ADVERTISED_LISTENERS:告监听器地址,用于外部访问
-e KAFKA_LISTENERS:节点监听的地址和端口,用于接收客户端连接
-e KAFKA_CFG_NUM_PARTITIONS:如果创建topic时没有给出划分partitions个数,这个数字将是topic下partitions数目的默认数值。默认1
-e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR:默认备份份数,仅指自动创建的topics。默认1

7、验证 kafka

Ⅰ.进入 master kafka容器:
docker exec -it 容器id bash
Ⅱ.进入 kafka bin目录,opt 目录下有俩kafka,随便进入其中一个的 bin 目录都可以。
cd /opt/kafka/bin
Ⅲ.创建 topic
./kafka-topics.sh --create --zookeeper 192.168.67.200:2181 --replication-factor 3 --partitions 5 --topic testTopic
或
./kafka-topics.sh --create --bootstrap-server 192.168.67.200:9092 --replication-factor 3 --partitions 5 --topic testTopic
Ⅳ.集群其他节点查看 topic,执行Ⅰ、Ⅱ步进入到 bin 目录。
./kafka-topics.sh --list --zookeeper 192.168.67.200:2181
或
./kafka-topics.sh --list --bootstrap-server 192.168.67.200:9092
Ⅴ.查看 topic 详情,执行Ⅰ、Ⅱ步进入到 bin 目录。
./kafka-topics.sh --describe --zookeeper 192.168.67.200:2181 --topic testTopic
或
./kafka-topics.sh --describe --bootstrap-server 192.168.67.200:9092 --topic testTopic
结果说明:
Topic: TestTopic 主题名
TopicId:主题编号
PartitionCount: 5 表示有5个分区
ReplicationFactor:3 表示有3个副本节点
Leader:主题节点号,
Replicas:表示主题副本节点有 BrokerId=1、3、4(包括Leader Replica和Follower Replica,且不管是否存活)
Isr:表示存活并且同步Leader节点的副本有BrokerId=1、3、4
Ⅵ.删除 topic,执行Ⅰ、Ⅱ步进入到 bin 目录。
./kafka-topics.sh --zookeeper 192.168.67.200:2181--delete --topic testTopic
或
./kafka-topics.sh --bootstrap-server 192.168.67.200:9092 --delete --topic testTopic
Ⅶ.生产者和消费者测试,执行Ⅰ、Ⅱ步进入到 bin 目录。
1.在 master 节点创建生产者
./kafka-console-producer.sh --broker-list 192.168.67.200:9092 --topic testTopic
2.在其他集群节点创建消费者
./kafka-console-consumer.sh --bootstrap-server 192.168.67.200:9092 --topic testTopic --from-beginning
标签: Docker kafka kafka集群 zookeeper zookeeper集群 集群
最后更新:2024年8月5日

Akim

犇 骉 Java、C#、Python、Go、Android、MiniProgram、Bootstrap、Vue2

点赞
< 上一篇
下一篇 >
文章目录
  • 1、准备工作
  • 2、关闭防火墙
  • 3、拉取 zookeeper 镜像
  • 4、运行 zookeeper 容器
  • 5、拉取 kafka 镜像
  • 6、运行  kafka 容器
  • 7、验证 kafka

Copyright © 2025 aianran.com All Rights Reserved.

免责申明 | 隐私政策 | 服务条款 | 关于我们

黔ICP备2023008200号-1

贵公网安备 52010202003594号