1.kafka依賴於zookeeper(傳送門https://www.cnblogs.com/answerThe/p/11267179.html),所以需要拉取kafka和zookeeper鏡像。
docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper
2.啟動zookeeper容器(wurstmeister/zookeeper鏡像擁有默認命令“/usr/sbin/sshd && bash /usr/bin/start-zk.sh”,所以只需啟動一個守護式容器即可)
docker run --name zookeeper -p 12181:2181 -d wurstmeister/zookeeper:latest
3.啟動三個kafka容器
docker run -p 19092:9092 --name kafka1 -d -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=宿主機IP:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主機IP:19092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
docker run -p 19093:9093 --name kafka2 -d -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=宿主機IP:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主機IP:19093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
docker run -p 19094:9094 --name kafka3 -d -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=宿主機IP:12181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主機IP:19094 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest
4.分別進入容器kafka1、kafka2、kafka3創建主題test1、test2、test3。下面以kafka3為例。
#在守護式容器中啟動一個交互式進程 docker exec -i -t kafka3 /bin/bash #創建主題test3 ./kafka-topics.sh --zookeeper 192.168.181.163:12181 --create --topic test3 --replication-factor 1 --partitions 3 Created topic "test3" #查看主題test3 ./kafka-topics.sh --zookeeper 192.168.181.163:12181 --describe --topic test3
可以看到,已經是集群環境,可以看到leader機器、副本在分區上的保存情況,和ISR列表成員
5.測試集群,在kafka3上向test1發送消息,在kafka2上消費test1
./kafka-console-producer.sh --broker-list 192.168.181.163:19092,192.168.181.163:19093,192.168.181.163:19094 --topic test1
./kafka-console-consumer.sh --bootstrap-server 192.168.181.163:19092,192.168.181.163:19093,192.168.181.163:19094 --topic test1 --from-beginning
6.依次關閉kafka2、test1后查看集群狀態