步骤1:拉取镜像
在docker上安装kafka需要先安装zookeeper,我们可以使用docker pull先把zookeeper和kafka的镜像拉取下来
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
镜像拉取到后可以根据实际使用修改tag,例如:
docker tag wurstmeister/zookeeper:latest registry.test.com/library/zookeeper:latest
docker tag wurstmeister/kafka:latest registry.test.com/library/kafka:latest
可以通过如下docker images |grep -E "zookeeper|kafka"查看修改tag后的镜像
docker images |grep -E "zookeeper|kafka"
步骤2:运行zookeeper
docker run -d --name zookeeper -p 2181:2181 -t registry.test.com/library/zookeeper
步骤3:运行kafka
# 10.160.32.28为宿主机IP
# KAFKA_ZOOKEEPER_CONNECT 需要修改成zookeeper所在容器IP,容器之间是可以通过IP访问的,但是不能填写成虚拟IP
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=172.17.0.4:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -t registry.cmcc.com/library/kafka:latest
KAFKA_ZOOKEEPER_CONNECT对应的Zookeper所在容器IP
步骤4:创建topic
# 查询kafka容器ID
docker ps |grep kafka
# 进入kafka容器
docker exec -it 53cc0e000953 /bin/sh
# 创建topic mykafkadk
/opt/kafka/bin/kafka-topics.sh --zookeeper 10.160.32.28:2181 --create --replication-factor 1 --partitions 1 --topic mykafkadk
步骤5:查询topic列表
/opt/kafka/bin/kafka-topics.sh --zookeeper 172.17.0.4:2181 --list
步骤6:发送消息
/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafkadk
步骤7:消费消息
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafkadk --from-beginning
若是发送消息报错,打印一堆日志需要检查步骤3运行kafka时配置参数是否正确,保存在/opt/kafka/config/server.properties中,若是有问题可以进行修改,docker容器中不能使用vi或vim命令直接编辑,需要使用sed命令进行修改或是将文件拷贝到容器外,修改好后再拷贝进容器
# 从容器中cp到容器外
docker cp 容器ID:/opt/kafka/config/server.properties /root/tmp
# 从容器外cp道容器中
docker cp /root/tmp/server.properties 容器ID:/opt/kafka/config/server.properties
完成后检查容器中文件的属组和权限是否正确
容器中重启kafka的命令
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
运行安装第二个kafka时需要修改如下参数:
1) name
2} 端口号
3)KAFKA_BROKER_ID
docker run -d --name kafka1 -p 9093:9093 -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=10.160.32.28:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.160.32.28:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -v /etc/localtime:/etc/localtime -t registry.cmcc.com/library/kafka:latest
创建两个kafka公用的topic:
/opt/kafka/bin/kafka-console-producer.sh --broker-list 10.160.32.28:9093 --topic kafkatesttopic1
发送消息:
/opt/kafka/bin/kafka-console-producer.sh --broker-list 10.160.32.28:9093 --topic kafkatesttopic1
消费消息:
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.160.32.28:9093 --topic kafkatesttopic1 --from-beginning