Apache Kafka是一個分布式消息發布訂閱系統,而Kafka環境往往是在集群中配置的。本篇就對配置3個broker的Kafka集群進行介紹。
Zookeeper集群
Kafka本身提供了啟動了zookeeper的腳本和配置文件。
1. 修改配置文件
進入kafka主目錄,編輯文件config/zookeeper.properties,配置如下:
tickTime=2000 #心跳時間,毫秒 initLimit=5 #Follower在啟動是需要在5個心跳時間內從Leader同步數據 syncLimit=2 #超過兩個心跳時間收不到Follower的效應,就認為此Follower已經下線
#zookeeper集群的三個服務器 server.1=192.168.10.152:2888:3888 server.2=192.168.10.153:2888:3888 server.3=192.168.10.170:2888:3888
在三個機器進行同樣得配置,或者將配置文件傳到集群中其他機器上。
2. 配置主機標識
在三台機器dataDir目錄(zookeeper.properties配置)下,新建文件myid,寫入相應標識
echo 1 > /tmp/zookeeper/myid #1為標識,在其他機器上改為2或3
3. 啟動Zookeeper集群
逐漸啟動三台機器的zookeeper構成一個集群,即在三台機器上運行
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties #-daemon以守護進程方式啟動zookeeper
由於節點Zookeeper啟動后,都會嘗試連接其他節點,先啟動的肯定連不上后啟動的節點,因此,此時打印的異常可以忽略,當節點全部啟動,集群在選出一個Leader后,異常就不會打印了。
檢查Zookeeper有沒有啟動
netstat -apn | grep 2181
搭建Kafka broker集群
1. 修改配置文件
修改config/server.properties文件
broker.id=0 #三個broker的id不能相同,因此改為不同的id listeners=PLAINTEXT://192.168.10.152:9092 #服務器監聽的地址,如果不配置從java.net.InetAddress.getCanonicalHostName()獲得 host.name=192.168.10.152 #broker 機器ip zookeeper.connect=192.168.10.152:2181,192.168.10.153:2181,192.168.10.170:2181
集群的其他機器也進行相應的配置
2. 啟動Kafka服務
在三個機器上啟動Kafka服務
bin/kafka-server-start.sh -daemon config/server.properties #-daemon以守護進程方式啟動kafka server
檢查服務是否啟動
ps -aux | grep config/server
測試
1. 創建topic
在任意一台機器上創建topic
bin/kafka-topics.sh --create --zookeeper 192.168.10.152:2181 --replication-factor 3 --partitions 3 --topic cluster-test
#--zookeeper是集群列表,可以指定所有節點,也可以指定為部分列表
#--replication-factor 為復制數目,數據會自動同步到其他broker上,防止某個broker宕機數據丟失
#--partitions 一個topic可以切分成多個partition,一個消費者可以消費多個partition,但一個partition只能被一個消費者消費
查看topic詳情
bin/kafka-topics.sh --describe --zookeeper 192.168.10.153:2181 --topic cluster-test
2. 啟動生產者、消費者
啟動生產者
bin/kafka-console-producer.sh --broker-list 192.168.10.152:9092 --topic cluster-test
在三台機器上分別啟動消費者
bin/kafka-console-consumer.sh --zookeeper 192.168.10.152:2181 --topic cluster-test --from-beginning
3. 測試
在生產者console輸入消息進行發送
此時,消費者console可以收到消息了
至此,一個簡單的Kafka集群就搭建起來了