本文基于Docker搭建一套單節(jié)點的Kafka消息隊列,Kafka依賴Zookeeper為其管理集群信息,雖然本例不涉及集群,但是該有的組件都還是會有,典型的kafka分布式架構(gòu)如下圖所示。本例搭建的示例包含Zookeeper + Kafka + Kafka-manger

mark
獲取鏡像
- zookeeper鏡像:zookeeper:3.4.9
- kafka鏡像:wurstmeister/kafka:0.10.2.0
- kafka-manager鏡像:kafka-manager:latest
建立Zookeeper容器
這里我們用最簡單的方式創(chuàng)建一個獨立的Zookeeper節(jié)點,如果要考慮zookeeper的高可用,可以將其做成一個集群,最好是能有多臺機器。
docker run --name some-zookeeper \
--restart always \
-p 2181:2181 \
-d zookeeper
默認的,容器內(nèi)配置文件在,/conf/zoo.cfg,數(shù)據(jù)和日志目錄默認在/data 和 /datalog,需要的話可以將上述目錄映射到宿主機的可靠文件目錄下。詳情參考Zookeeper官方鏡像
建立kafka節(jié)點
這里同樣只做一個簡單的單點kafka
docker run --name kafka \
-p 9092:9092 \
-e KAFKA_ADVERTISED_HOST_NAME=kafka01 \
-e KAFKA_CREATE_TOPICS="test:1:1" \
-e KAFKA_ZOOKEEPER_CONNECT=100.100.16.231:2181 \
-d wurstmeister/kafka
詳情參考Kafka官方鏡像
創(chuàng)建Kafka管理節(jié)點
kafka-manager有圖形化UI,可以方便的監(jiān)控集群狀態(tài),調(diào)整隊列配置
docker run -itd \
--restart=always \
--name=kafka-manager \
-p 9000:9000 \
-e ZK_HOSTS="100.100.16.231:2181" \
sheepkiller/kafka-manager
容器啟動以后訪問主機的9000端口,http://xxx:9000

mark
首次進入需要添加一個集群標識,如下圖所示

mark
配置好以后,通過Zookeeper該管理節(jié)點可以讀取到整個Kafka集群的信息,并且我們可以通過JMX直接看到集群的健康狀態(tài)

mark
也可以看到主題的讀寫速度,偏移量等信息,如下圖所示:

mark
讀寫驗證
讀寫驗證的方法有很多,這里我們用kafka容器自帶的工具來驗證,首先進入到kafka容器的交互模式:
docker exec -it kafka /bin/bash
- 創(chuàng)建一個主題:
/opt/kafka/bin/kafka-topics.sh --create --zookeeper 100.100.16.231:2181 --replication-factor 1 --partitions 1 --topic my-test
- 查看剛創(chuàng)建的主題:
/opt/kafka/bin/kafka-topics.sh --list --zookeeper 100.100.16.231:2181

mark
- 發(fā)送消息:
/opt/kafka/bin/kafka-console-producer.sh --broker-list 100.100.16.231:9092 --topic my-test
This is a message
This is another message
- 讀取消息:
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 100.100.16.231:9092 --topic my-test --from-beginning