1. 程式人生 > >使用docker搭建KaFka叢集

使用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功能
borker1172.18.0.2kafka叢集之一
borker2172.18.0.3kafka叢集之二
borker3172.18.0.4kafka叢集之三
producer172.18.0.5訊息生產者
consumer1172.18.0.5訊息消費者之一
consumer2172.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

  1. 分別登入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 &

驗證訊息服務

  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。