kafka完全分散式叢集搭建-kafka_2.11-0.9.0.1
最近在學習分散式的訊息系統kafka,特此記錄搭建kafka叢集過程。
環境:
機器IP與名稱對應關係如下:
192.168.152.192 master
192.168.152.193 slave1
192.168.152.194 slave2
1. 為了高可用,kafka採用了zookeeper,zookeeper的叢集搭建可以參照這裡。
2. 總體思路,在一臺機器上配置好再遠端複製到其他機器即可,SSH互相無密碼訪問可以參考這裡。
3. 在master機器上配置:
3.1 建立必要目錄與下載壓縮包
[[email protected]
[[email protected]]# cd kafka
[[email protected]]# mkdir kafkalogs #存放kafka訊息的目錄,也可以使用預設的目錄
[[email protected]]# wget http://apache.opencas.org/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
[[email protected]]# tar zxvf kafka_2.11-0.9.0.1.tgz .
3.2 修改配置檔案
[[email protected]
主要配置的是server.properties
下面逐一解釋:
broker.id=0 #當前機器在kafka機器裡唯一標識,與zookeeper的myid一個意思,由於我使用獨立zookeeper這裡可以註釋掉
port=9092 #socket監聽的埠
host.name=192.168.152.192 #broker繫結的IP,我這裡三臺機器都綁定了,後面遠端複製的時候記得修改
num.network.threads=3 #broker處理網路的執行緒數目
num.io.threads=8 #broker處理IO的執行緒數目
socket.send.buffer.bytes=102400 #kafka傳送資料緩衝區的大小,到達閾值才傳送
socket.receive.buffer.bytes=102400 #kafka接收資料緩衝區的大小,達到閾值才落地
socket.request.max.bytes=104857600 #kafka所能接受的資料最大值,100MB,這個值應該小於機器配置的Java heap,一般Java heap為記憶體的1/4
log.dirs=/home/kafka/kafkalogs #儲存訊息的目錄位置
num.partitions=1 #每個主題的預設分割槽數目,更多的分割槽可以允許更多的消費,可以提高效能
num.recovery.threads.per.data.dir #在kafka啟動和關閉flush時,還原日誌時,對於每個資料目錄所能使用的執行緒數目
log.flush.interval.message=10000 #當訊息達到10000條時就會強制刷一次資料到磁碟
log.flush.interval.ms=1000 #每過1秒就會強制刷資料到磁碟,單位毫秒
log.retention.hours=168 #訊息最大持久化時間,單位小時,即7天
log.retention.bytes=1073741824 #一種持久化策略,當剩餘段檔案不低於這個閾值,當前段就會從日誌訊息中刪除
log.segment.bytes=1073741824 #一個段檔案的最大值,達到最大值會另起一個新的segment
log.retention.check.interval.ms=300000 #每300秒去檢驗一下段檔案是否能被刪除
zookeeper.connect=192.168.152.192:12181,192.168.152.193:12181,192.168.152.194:12181 #設定zookeeper的埠
zookeeper.connect.timeout.ms=6000 #連線zookeeper的超時時間
解釋完畢,上面也是我配置檔案中的內容,注意host.name=192.168.152.192在其他兩個機器上要作對應修改
master機器配置完畢
4. 切換到slave1和slave2上建立相應的目錄
[[email protected]]# mkdir /home/kafka
[[email protected]]# mkdir /home/kafka/kafkalogs
[[email protected]]# mkdir /home/kafka
[[email protected]]# mkdir /home/kafka/kafkalogs
5. 回到master機器實施遠端複製命令
[[email protected]]# scp -r /home/kafka/kafka_2.11-0.9.0.1 slave1:/home/kafka
[[email protected]]# scp -r /home/kafka/kafka_2.11-0.9.0.1 slave2:/home/kafka
6. 切換到slave1和slave2上修改配置檔案
[[email protected]]# vim /home/kafka/kafka_2.11-0.9.0.1/config/server.properties
找到host.name=一行,替換掉IP,我這裡是192.168.152.193,儲存退出
[[email protected]]# vim /home/kafka/kafka_2.11-0.9.0.1/config/server.properties
找到host.name=一行,替換掉IP,我這裡是192.168.152.194,儲存退出
7. 進行驗證7.1 先啟動zookeeper叢集
[[email protected]]# /home/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
[[email protected]]# /home/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
[[email protected]]# /home/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
7.2 再啟動kafka叢集
--------------master--------------
[[email protected]]# cd /home/kafka/kafka_2.11-0.9.0.1/bin
[[email protected]]# ./kafka-server-start.sh -daemon ../config/server.properties
[[email protected]]# jps
2750 QuorumPeerMain
3930 Jps
3246 Kafka
--------------slave1--------------
[[email protected]]# cd /home/kafka/kafka_2.11-0.9.0.1/bin
[[email protected]]# ./kafka-server-start.sh -daemon ../config/server.properties
[[email protected]]# jps
3341 Kafka
2632 QuorumPeerMain
3666 Jps
--------------slave2--------------
[[email protected]]# cd /home/kafka/kafka_2.11-0.9.0.1/bin
[[email protected]]# ./kafka-server-start.sh -daemon ../config/server.properties
[[email protected]]# jps
2612 QuorumPeerMain
3682 Jps
3293 Kafka
7.3 建立一個Topic例項:
7.3.1 在一臺機器上建立一個主題
[[email protected] bin]# ./kafka-topics.sh --create --zookeeper 192.168.152.192:12181 --replication-factor 3 --partitions 1 --topic hello
7.3.2 在一臺機器上建立一個釋出者
[[email protected] bin]# ./kafka-console-producer.sh --broker-list 192.168.152.193:9092 --topic hello
此時控制檯會捕獲鍵盤值,當有換行鍵被按下表示一條訊息被髮送出去
7.3.3 在一臺機器上建立一個訂閱者
[[email protected] bin]# ./kafka-console-consumer.sh --zookeeper 192.168.152.194:12181 --topic hello --from-beginning
此時控制檯會處於接收狀態
7.3.4 在slave1上輸入資訊回車之後,slave2上會同步出現傳送過來的訊息。要關閉slave1或者slave2,Ctrl+C即可
8. 關閉kafka叢集
[[email protected] bin]# ./kafka-server-stop.sh
[[email protected] bin]# ./kafka-server-stop.sh
[[email protected] bin]# ./kafka-server-stop.sh
搭建完畢