基於Docker搭建分散式訊息佇列Kafka
阿新 • • 發佈:2018-11-22
本文基於Docker搭建一套單節點的Kafka訊息佇列,Kafka依賴Zookeeper為其管理叢集資訊,雖然本例不涉及叢集,但是該有的元件都還是會有,典型的kafka分散式架構如下圖所示。本例搭建的示例包含Zookeeper + Kafka + Kafka-manger
mark
獲取映象
- zookeeper映象:zookeeper:3.4.9
- kafka映象:wurstmeister/kafka:0.10.2.0
- kafka-manager映象:kafka-manager:latest
建立Zookeeper容器
這裡我們用最簡單的方式建立一個獨立的Zookeeper節點,如果要考慮zookeeper的高可用,可以將其做成一個叢集,最好是能有多臺機器。
docker run --name some-zookeeper \
--restart always \
-p 2181:2181 \
-d zookeeper
預設的,容器內配置檔案在,/conf/zoo.cfg,資料和日誌目錄預設在/data 和 /datalog,需要的話可以將上述目錄對映到宿主機的可靠檔案目錄下。詳情參考Zookeeper官方映象
建立kafka節點
這裡同樣只做一個簡單的單點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官方映象
建立Kafka管理節點
kafka-manager有圖形化UI,可以方便的監控叢集狀態,調整佇列配置
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該管理節點可以讀取到整個Kafka叢集的資訊,並且我們可以通過JMX直接看到叢集的健康狀態
mark
也可以看到主題的讀寫速度,偏移量等資訊,如下圖所示:
mark
讀寫驗證
讀寫驗證的方法有很多,這裡我們用kafka容器自帶的工具來驗證,首先進入到kafka容器的互動模式:
docker exec -it kafka /bin/bash
- 建立一個主題:
/opt/kafka/bin/kafka-topics.sh --create --zookeeper 100.100.16.231:2181 --replication-factor 1 --partitions 1 --topic my-test
- 檢視剛建立的主題:
/opt/kafka/bin/kafka-topics.sh --list --zookeeper 100.100.16.231:2181
mark
- 傳送訊息:
/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
參考:https://kafka.apache.org/quickstart