1.安装
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
2.启动zookeeper
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
3.启动kafka
docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=ip:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://ip:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
4.启动验证
# 进入容器
docker exec -it kafka /bin/sh
# 进入路径
cd /opt/kafka_2.11-2.0.0/bin
# 运行发送消息
[生产者]
kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
[消费者]
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
生产者消费:
消费者接收:
注:
启动参数含义:
-e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
-e KAFKA_ZOOKEEPER_CONNECT=ip:2181/kafka 配置zookeeper管理kafka的路径ip:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://ip:9092 把kafka的地址端口注册给zookeeper
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
-v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
查看zookeeper中是否注册kafka
docker exec -it zookeeper bash bin/zkCli.sh
解决Docker容器连接 Kafka 连接失败问题
参考:https://www.cnblogs.com/hellxz/p/why_cnnect_to_kafka_always_failure.html
https://www.cnblogs.com/hellxz/p/how_to_add_hosts_on_docker.html
docker中kafka连接zookeeper
1.查看当前主题的信息:docker run -it --rm --network host wurstmeister/kafka bash /opt/kafka/bin/kafka-topics.sh --zookeeper IP:2181 --describe --topic mykafka
4.修改主题分区:docker run -it --rm --network host wurstmeister/kafka bash /opt/kafka/bin/kafka-topics.sh --zookeeper IP:2181 -alter --partitions 4 --topic mykafka
5.查看修改后的分区信息:docker run -it --rm --network host wurstmeister/kafka bash /opt/kafka/bin/kafka-topics.sh --zookeeper IP:2181 --describe --topic mykafka
注意:docker中kafka因为host原因连接不到zookeeper,添加--rm --network host即可