1. 概述
以docker-compose的方式搭建zookeeper+kafka3的集群,比起用docker命令的方式更加简单,还能保留配置信息。不会docker-compose没关系,按照我下面的操作步骤即可。集群的结构是三个zookeeper节点加上三个kafka节点,zookeeper镜像的版本是3.8.0,kafka的版本为3.0.0。在安装前默认你已经安装好了docker和docker-compose。本文参考引用博客中的安装过程,原博主的docker-compose文件有一点小瑕疵,在重启虚拟机以后,kafka节点不会自动重启,需要我们自己手动启动容器。我在原博主的基础上补充上了这一点,现在你即使重启虚拟机,docker容器会自动启动。
2. 代码
version: '3.1'
networks:zk-net: # 网络名driver: bridgeservices:# zookeeper集群zoo1:image: zookeeper:3.8.0container_name: zoo1 # 容器名称restart: always # 开机自启hostname: zoo1 # 主机名ports:- 2181:2181 # 端口号environment:ZOO_MY_ID: 1ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181networks:- zk-netzoo2:image: zookeeper:3.8.0container_name: zoo2restart: alwayshostname: zoo2ports:- 2182:2181environment:ZOO_MY_ID: 2ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181networks:- zk-netzoo3:image: zookeeper:3.8.0container_name: zoo3restart: alwayshostname: zoo3ports:- 2183:2181environment:ZOO_MY_ID: 3ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181networks:- zk-net# kafka集群kafka1:image: 'bitnami/kafka:3.0.0'container_name: kafka1restart: alwayshostname: kafka1networks:- zk-netports:- '9092:9092'environment:- KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka # 连接zookeeper集群- KAFKA_BROKER_ID=1 # 设置kafka的brokerid- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092 # 当前kafka节点暴露出的端口号- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9092 # 外部访问的路径- ALLOW_PLAINTEXT_LISTENER=yesdepends_on:- zoo1- zoo2- zoo3kafka2:image: 'bitnami/kafka:3.0.0'container_name: kafka2restart: alwayshostname: kafka2networks:- zk-netports:- '9093:9093'environment:- KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka- KAFKA_BROKER_ID=2- KAFKA_CFG_LISTENERS=PLAINTEXT://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9093- ALLOW_PLAINTEXT_LISTENER=yesdepends_on:- zoo1- zoo2- zoo3kafka3:image: 'bitnami/kafka:3.0.0'container_name: kafka3restart: alwayshostname: kafka3networks:- zk-netports:- '9094:9094'environment:- KAFKA_CFG_ZOOKEEPER_CONNECT=zoo1:2181,zoo2:2182,zoo3:2183/kafka- KAFKA_BROKER_ID=3- KAFKA_CFG_LISTENERS=PLAINTEXT://:9094- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.111:9094- ALLOW_PLAINTEXT_LISTENER=yesdepends_on:- zoo1- zoo2- zoo3
注意事项
- 文件中KAFKA_CFG_ADVERTISED_LISTENERS属性的IP替换为你自己虚拟机的IP。
- 建立docker-compose-zookeepers-kafkas.yml文件,将代码复制进去
- 将文件放入虚拟机中,命令行切换到yml文件所在目录
- 运行指令:docker-compose -f docker-compose-zookeepers-kafkas.yml up -d
- 使用docker ps查看总共六个容器是否启动成功
- 验证zookeeper安装成功
# 随便进入一个zk容器
docker exec -it zoo1 /bin/bash
# 进入到zk的bin目录
cd /apache-zookeeper-3.8.0-bin/
cd bin
# 连接到 ZooKeeper 服务器并执行各种操作。
./zkCli.sh -server 127.0.0.1:2181
# 输入
ls /kafka/brokers/ids
# 结果输出[1, 2, 3]说明kafka与zk之间的连接没有问题
- 验证kafka安装成功
# 1. 建立两个客户端
# 2. 客户端1进入kafka1服务(生产者)
docker exec -it kafka1 /bin/bash
# 创建一个主题Topic,起名为first,指明3个分区和3个副本
# 分区可以超过3,副本不能超过3
kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 3 --replication-factor 3 --topic first
# 生产者发送消息到主题
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic first
# 3. 客户端2进入kafka2服务(消费者)
docker exec -it kafka2 /bin/bash
# 消费者先查看主题列表
kafka-topics.sh --bootstrap-server localhost:9093 --list
# 使用消费者脚本,开始监听消息,相当于进入消费者模式
kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic first
# 4. 客户端1生产者发消息,客户端2消费者消费消息
参考博客:
https://blog.csdn.net/cl939974883/article/details/126511784