1.概述
在《Kafka實戰-入門》一篇中,為大家介紹了Kafka的相關背景、原理架構以及一些關鍵知識點,本篇部落格為大家來贅述一下Kafka Cluster的相關內容,下面是今天為大家分享的目錄:
- 基礎軟體的準備
- Kafka Cluster的部署
- Send Messages
- HA特性
下面開始今天的內容分享。
2.基礎軟體的準備
2.1 ZK
由於Kafka Cluster需要依賴ZooKeeper(後面簡稱ZK)叢集來協同管理,所以這裡我們需要事先搭建好ZK叢集,關於ZK的叢集搭建,大家可以參考我寫的《配置高可用的Hadoop平臺》,這篇文章中我介紹瞭如何去搭建ZK,這裡就不多贅述,本篇部落格為大家介紹如何去搭建Kafka Cluster。
2.2 Kafka
由於Kafka已經貢獻到Apache基金會了,我們可以到Apache的官方網站上去下載Kafka的基礎安裝包,下載地址如下所示:
Kafka安裝包 [下載地址]
Kafka原始碼 [下載地址]
這裡,我們直接使用官方編譯好的安裝包進行Kafka Cluster的安裝部署。下面我們來開始Kafka Cluster的搭建部署。
3.Kafka Cluster的部署
首先,我們將下載好的Kafka基礎安裝包解壓,命令如下所示:
- 解壓Kafka
[hadoop@dn1 ~]$ tar -zxvf kafka_2.9.1-0.8.2.1.tgz
- 進入到Kafka解壓目錄
[hadoop@dn1 ~]$ cd kafka_2.9.1-0.8.2.1
- 配置環境變數
[hadoop@dn1 ~]$ vi /etc/profile
export KAFKA_HOME=/home/hadoop/kafka_2.11-0.8.2.1 export PATH=$PATH:$KAFKA_HOME/bin
- 配置Kafka的zookeeper.properties
# the directory where the snapshot is stored. dataDir=/home/hadoop/data/zk # the port at which the clients will connect clientPort=2181 # disable the per-ip limit on the number of connections since this is a non-production config maxClientCnxns=0
- 配置server.properties
# The id of the broker. This must be set to a unique integer for each broker. broker.id=0
注:這裡配置broker的時候,每臺機器上的broker保證唯一,從0開始。如:在另外2臺機器上分別配置broker.id=1,broker.id=2
- 配置producer.properties
# list of brokers used for bootstrapping knowledge about the rest of the cluster # format: host1:port1,host2:port2 ... metadata.broker.list=dn1:9092,dn2:9092,dn3:9092
- 配置consumer.properties
# Zookeeper connection string # comma separated host:port pairs, each corresponding to a zk # server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" zookeeper.connect=dn1:2181,dn2:2181,dn3:2181
至此,Kafka Cluster部署完成。
4.Send Messages
4.1啟動
首先,在啟動Kafka叢集服務之前,確保我們的ZK叢集已啟動,下面我們啟動Kafka叢集服務。啟動命令如下所示:
[hadoop@dn1 kafka_2.11-0.8.2.1]$ kafka-server-start.sh config/server.properties &
注:其他2個節點參照上述方式啟動。
另外,啟動其他節點的時候,在最先開始啟動的節點會顯示其它節點加入的資訊記錄,如下圖所示:
4.2驗證啟動程式
[hadoop@dn1 kafka_2.11-0.8.2.1]$ jps 2049 QuorumPeerMain 2184 Kafka 2233 Jps
4.3建立Topic
在服務啟動後,我們開始建立一個Topic,命令如下所示:
[hadoop@dn1 ]$ kafka-topics.sh --zookeeper dn1:2181,dn2:2181,dn3:2181 --topic test1 --replication-factor 3 --partitions 1 --create
然後,我們檢視該Topic的相關資訊,命令如下所示:
[hadoop@dn1 ]$ kafka-topics.sh --zookeeper dn1:2181,dn2:2181,dn3:2181 --topic test1 --describe
預覽資訊如下圖所示:
下面解釋一下這些輸出。第一行是對所有分割槽的一個描述,然後每個分割槽都會對應一行,因為我們只有一個分割槽所以下面就只加了一行。
- Leader:負責處理訊息的讀和寫,Leader是從所有節點中隨機選擇的。
- Replicas:列出了所有的副本節點,不管節點是否在服務中。
- Isr:是正在服務中的節點
4.4生產訊息
下面我們使用kafka的Producer生產一些訊息,然後讓Kafka的Consumer去消費,命令如下所示:
[hadoop@dn1 ]$ kafka-console-producer.sh --broker-list dn1:9092,dn2:9092,dn3:9092 --topic test1
4.4消費訊息
接著,我們在另外一個節點啟動消費程式,來消費這些訊息,命令如下所示:
[hadoop@dn2 ]$ kafka-console-consumer.sh --zookeeper dn1:2181,dn2:2181,dn3:2181 --from-beginning --topic test1
消費記錄如下圖所示:
5.HA特性
這裡,從上面的截圖資訊可以看出,在DN1節點上Kafka服務上Lead,我們先將DN1節點的Kafka服務kill掉,命令如下:
[hadoop@dn1 config]$ jps 2049 QuorumPeerMain 2375 Jps 2184 Kafka [hadoop@dn1 config]$ kill -9 2184
然後,其他節點立馬選舉出了新的Leader,如下圖所示:
下面,我們來測試訊息的生產和消費,如下圖所示:
- 生產訊息
- 消費訊息
通過測試,可以發現,Kafka的HA特性還是不錯的,擁有不錯的容錯機制。
6.總結
這裡,在部署Kafka Cluster的時候,有些地方需要我們注意,比如:在我們啟動Kafka叢集的時候,確保ZK叢集啟動,另外,在配置Kafka配置檔案資訊時,確保ZK的叢集資訊配置到相應的配置檔案中,總體來說,配置還算較為簡單,需要在部署的時候,仔細配置各個檔案即可。
7.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!