1. 程式人生 > >基於Docker搭建分散式訊息佇列Kafka

基於Docker搭建分散式訊息佇列Kafka

本文基於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

原文連結:《基於Docker搭建分散式訊息佇列Kafka》