使用docker搭建KaFka叢集
本文轉載自:https://blog.csdn.net/boling_cavalry/article/details/78309050。本著學習的的態度,按照步驟操作了一番,很順利的完成了安裝。裝載了該文章。未經允許,還望見諒。
Docker軟體版本
本次實戰的電腦作業系統是Win10專業版,安裝的Docker版本資訊如下:
ssh工具
為了登入容器方便,建議使用SecureCRT;
環境規劃
本次實戰要搭建六個容器,使用同一個映象,容器們的功能如下:
1. kafka叢集:三個broker,分別是borker1、broker2、broker3;
2. 訊息生產者:一個;
3. 訊息消費者:兩個;
容器名 | ip | 功能 |
---|---|---|
borker1 | 172.18.0.2 | kafka叢集之一 |
borker2 | 172.18.0.3 | kafka叢集之二 |
borker3 | 172.18.0.4 | kafka叢集之三 |
producer | 172.18.0.5 | 訊息生產者 |
consumer1 | 172.18.0.5 | 訊息消費者之一 |
consumer2 | 172.18.0.5 | 訊息消費者之二 |
docker-compose.yml檔案
使用docker-compose可以使多個容器的管理更簡單方便,按照上面所劃分功能配置出的docker-compose.yml檔案內容如下:
version: '2'
services:
broker1:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: broker1
ports:
- "19011:22"
restart: always
broker2:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: broker2
depends_on:
- broker1
ports:
- "19012:22"
restart: always
broker3:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: broker3
depends_on:
- broker2
ports:
- "19013:22"
restart: always
producer:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: producer
links:
- broker1:hostb1
- broker2:hostb2
- broker3:hostb3
ports:
- "19014:22"
restart: always
consumer1:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: consumer1
depends_on:
- producer
links:
- broker1:hostb1
- broker2:hostb2
- broker3:hostb3
ports:
- "19015:22"
restart: always
consumer2:
image: bolingcavalry/ssh-kafka292081-zk346:0.0.1
container_name: consumer2
depends_on:
- consumer1
ports:
- "19016:22"
links:
- broker1:hostb1
- broker2:hostb2
- broker3:hostb3
restart: always
如上所示,所有容器的22埠都對映到當前電腦的不同埠,方便使用ssh工具登入,另外訊息生產者和消費者都配置了link引數,避免在連線kafka叢集的時候直接輸入ip;
啟動所有容器
在docker-compose.yml所在資料夾下執行以下命令:
docker-compose up -d
會依次啟動上述的六個容器,如下圖:
管理每臺機器的登入和連線
由於每個容器都支援ssh登入,所以我們可以用SecureCRT來管理登入,建立六個ssh連線,host都是127.0.0.1,埠依次是19011到19016,如下圖:
例如broker1的配置如下:
這樣後面我們的連線登入操作就方便了很多。
配置hosts
分別登入broker1、broker2、broker3,用ip addr檢視他們的IP分別是:172.18.0.2、172.18.0.3、172.18.0.4,於是將這三個容器的/etc/hosts檔案都新增以下三行:
broker1 172.18.0.2
broker2 172.18.0.3
broker3 172.18.0.4
配置zookeeper
- 分別登入broker1、broker2、broker3,開啟它們的/usr/local/work/zookeeper-3.4.6/conf/zoo.cfg檔案,在最下面新增以下內容:
server.1=broker1:2887:3887
server.2=broker2:2888:3888
server.3=broker3:2889:3889
這樣就指定了zookeeper叢集的機器;
2. 配置每個zookeeper的身份:
在broker1執行以下命令:
echo 1 > /usr/local/work/zkdata/myid
在broker2執行以下命令:
echo 2 > /usr/local/work/zkdata/myid
在broker3執行以下命令:
echo 3 > /usr/local/work/zkdata/myid
啟動zookeeper
在broker1、broker2、broker3上依次執行以下命令將所有zookeeper啟動:
/usr/local/work/zookeeper-3.4.6/bin/zkServer.sh start
啟動後,可以用以下命令檢視當前機器的zookeeper狀態:
/usr/local/work/zookeeper-3.4.6/bin/zkServer.sh status
如下圖,broker2是leader:
至此,zookeeper叢集啟動成功;
配置kafka
在broker1上,開啟檔案/usr/local/work/kafka_2.9.2-0.8.1/config/server.properties,修改以下兩處:
1. 找到下圖紅框位置:
將原來的broker.id=0改為broker.id=1,這裡的”1”是和myid檔案的內容一致;
對broker2、broker3也做相同的操作,broker.id分別是2和3;
2. 找到下圖紅框位置:
將上圖紅框中的內容改成以下內容:
zookeeper.connect=broker1:2181,broker2:2181,broker3:2181
- 1
對broker2、broker3、producer也做相同的操作;
啟動kafka叢集
在broker1、broker2、broker3上面依次執行以下命令,即可啟動kafka叢集:
nohup /usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-server-start.sh /usr/local/work/kafka_2.9.2-0.8.1/config/server.properties >/usr/local/work/log/kafka.log 2>1 &
驗證訊息服務
- 在broker1上執行以下命令,在broker1上建立一個topic:
/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-topics.sh --create --zookeeper broker1:2181,broker2:2181,broker3:2181 --replication-factor 1 --partitions 3 --topic test001
以上命令建立了一個名為”test001”的主題,有三個partition;
2. 在broker2上執行以下命令,檢視當前topic列表:
/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-topics.sh --list --zookeeper broker1:2181,broker2:2181,broker3:2181
可以看到topic列表如下:
如上圖,剛剛在broker1上建立的主題test001可以看到;
3. 在broker1的/tmp/kafka-logs/目錄下,可以看到新建的topic的partition資料夾,如下圖:
如上圖,有個test001-2的目錄,表明這是存放2號partition內容的地方,進入該資料夾,可以看到index和log檔案;
登入broker2和broker3可以分別看到test001-0和test001-1資料夾;
4. 登入producer容器,執行以下命令,進入傳送訊息的模式:
/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-console-producer.sh --broker-list broker1:9092,broker2:9092,broker3:9092 --topic test001
如下圖所示:
此時已經準備完畢,我們可以準備訊息消費者了;
5. 依次登入consumer1、consumer2,都執行以下命令,即可進入接受訊息的模式:
/usr/local/work/kafka_2.9.2-0.8.1/bin/kafka-console-consumer.sh --zookeeper broker1:2181,broker1:2181,broker1:2181 --from-beginning --topic test001
現在可以傳送訊息了;
6. 在producer容器上,現在是傳送訊息的模式,依次輸入以下三個字串,每輸入一個就敲回車,這樣相當於傳送了三條訊息,然後再去consumer1和consumer2上看一下,發現效果如下:
如上圖,consumer1和consumer2一樣,都是訊息全部收到;
至此,Kafka叢集環境的搭建和驗證就完成了.
其實使用映象的時候完全沒有必要安裝ssh。