1. 安装zookeeper集群
2. 准备3台虚拟机
192.168.10.104 #node-1
192.168.10.105 #node-2
192.168.10.106 #node-3
3. 创建目录
mkdir -p /usr/docker/kafka-1/logs #node-1
mkdir -p /usr/docker/kafka-2/logs #node-2
mkdir -p /usr/docker/kafka-3/logs #node-3
4. 创建容器
- 注意,KAFKA_BROKER_ID不能重复
- 第一个节点(192.168.10.104)
docker run -d --net host --restart unless-stopped -p 9092:9092 \ -e CLUSTER_NAME=KAFKA \ -e KAFKA_ADVERTISED_HOST_NAME=192.168.10.104 \ -e KAFKA_ADVERTISED_PORT=9092 \ -e KAFKA_ZOOKEEPER_CONNECT=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181 \ -e KAFKA_HOST_NAME=192.168.10.104 \ -e KAFKA_BROKER_ID=1 \ -e KAFKA_LISTENERS=PLAINTEXT://192.168.10.104:9092 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.104:9092 \ -e KAFKA_DELETE_TOPIC_ENABLE=true \ -v /usr/docker/kafka-1/logs:/kafka \ --name kafka-1 wurstmeister/kafka:2.12-2.2.2
- 第二个节点(192.168.10.105)
docker run -d --net host --restart unless-stopped -p 9092:9092 \ -e CLUSTER_NAME=KAFKA \ -e KAFKA_ADVERTISED_HOST_NAME=192.168.10.105 \ -e KAFKA_ADVERTISED_PORT=9092 \ -e KAFKA_ZOOKEEPER_CONNECT=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181 \ -e KAFKA_HOST_NAME=192.168.10.105 \ -e KAFKA_BROKER_ID=2 \ -e KAFKA_LISTENERS=PLAINTEXT://192.168.10.105:9092 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.105:9092 \ -e KAFKA_DELETE_TOPIC_ENABLE=true \ -v /usr/docker/kafka-2/logs:/kafka \ --name kafka-2 wurstmeister/kafka:2.12-2.2.2
- 第三个节点(192.168.10.106)
docker run -d --net host --restart unless-stopped -p 9092:9092 \ -e CLUSTER_NAME=KAFKA \ -e KAFKA_ADVERTISED_HOST_NAME=192.168.10.106 \ -e KAFKA_ADVERTISED_PORT=9092 \ -e KAFKA_ZOOKEEPER_CONNECT=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181 \ -e KAFKA_HOST_NAME=192.168.10.106 \ -e KAFKA_BROKER_ID=3 \ -e KAFKA_LISTENERS=PLAINTEXT://192.168.10.106:9092 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.106:9092 \ -e KAFKA_DELETE_TOPIC_ENABLE=true \ -v /usr/docker/kafka-3/logs:/kafka \ --name kafka-3 wurstmeister/kafka:2.12-2.2.2
5. 测试集群(node-1上生产一条消息,由node-2消费)
- 在node-1生产一条消息
- docker exec -it kafka-1 bash #进入容器
- cd /opt/kafka_2.12-2.2.2/bin/
- kafka-topics.sh --create --zookeeper 192.168.10.101:2181 --replication-factor 1 --partitions 1 --topic test1 #先创建主题
- kafka-console-producer.sh --broker-list 192.168.10.104:9092 --topic test1 #启动生产者
- {"token":"Bearer ITHEIMA","actime":"2022-11-17 22:11:07","uri":"/web/items/S1235433012779413504.html","ip":"192.168.10.102"} #消息
2. 在node-2消费这条消息
- docker exec -it kafka-2 bash #进入容器
- cd /opt/kafka_2.12-2.2.2/bin/
- kafka-console-consumer.sh --bootstrap-server 192.168.10.105:9092 --topic test1 --from-beginning #启动消费者
3. 消费成功