1. 程式人生 > >kafka完全分散式叢集搭建-kafka_2.11-0.9.0.1

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]

]# mkdir /home/kafka

[[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]

]# cd kafka_2.11-0.9.0.1/config

主要配置的是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

搭建完畢