由于 Kafka 的注册发现是通过 Zookeeper 实现的,所以我们会从 Zookeeper 开始搭建 Kafka 集群

拉取镜像

1
2
3
docker pull zookeeper
docker pull wurstmeister/kafka
docker pull sheepkiller/kafka-manager

Zookeeper

1
2
3
docker run -d --restart=always --name zookeeper -p 7000:2181 --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -v /root/docker_data/zookeeper:/data -v /root/docker_log/zookeeper:/datalog -v /etc/localtime:/etc/localtime zookeeper

-p 7000:2181 # 将zookeeper的2181端口映射到本机的7000

这里暴露出来的Zookeeper的连接地址为:宿主IP:7000 (后面会用到)

Kafka

下面的示例中启动2个Kafka。主要区别是 namepKAFKA_BROKER_IDKAFKA_ADVERTISED_LISTENERSKAFKA_BROKER_ID

1
2
3
4
5
6
7
docker run -d --restart=always --name kafka0 -p 7010:9092 --env KAFKA_BROKER_ID=0 --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.111:7010 -v /root/docker_log/kafka0:/kafka/kafka-logs-1 --link zookeeper -v /etc/localtime:/etc/localtime --env KAFKA_LOG_DIRS=/kafka/kafka-logs-1 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
docker run -d --restart=always --name kafka1 -p 7011:9092 --env KAFKA_BROKER_ID=1 --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.111:7011 -v /root/docker_log/kafka1:/kafka/kafka-logs-1 --link zookeeper -v /etc/localtime:/etc/localtime --env KAFKA_LOG_DIRS=/kafka/kafka-logs-1 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

--env KAFKA_BROKER_ID # 在集群中的ID
--env KAFKA_ZOOKEEPER_CONNECT # 上面设置的Zookeeper端口(连接地址)
--env KAFKA_ADVERTISED_LISTENERS # Docker宿主机IP + Kafka暴露的端口
--env KAFKA_LISTENERS # Kafka的监听地址,这里用默认的端口号就行

这里暴露了2个Kafka:
宿主机IP:7010
宿主机IP:7011

KafkaManager

安装管理界面

1
2
3
docker run -d --name kfk-manager --restart always -p 7020:9000 --env ZK_HOSTS=192.168.1.111:7000 sheepkiller/kafka-manager

--env ZK_HOSTS # 这里就是上面配置过的Zookeeper。当然也可以用 --link 来实现

在浏览器中,打开宿主IP(192.168.1.111):7020 就可以看到管理界面了
不过仍需要配置Zookeeper集群信息,才可以实现查看具体信息