前言
在生產環境下,kafka集群中發現遇到了性能瓶頸,主要體現在現有的集群下,某個topic的磁區存盤不夠用了,生產者生產訊息量太大,或者消費端消費速度跟不上生產進度,導致磁區資料大量堆積;
在這種情況下,為緩解集群壓力,可以考慮動態擴容kafka集群,也叫做服役新節點,本篇演示下如何基于現有的kafka集群快速服役一臺新的kafka節點(或實體)
環境準備
1、虛擬機一臺,并安裝centos7的系統(或者阿里云等云服務器),4核8G
2、kafka_2.12-2.7.0 安裝包,以及zookeeper安裝包

kafka集群搭建
為演示后面的效果,需要提前搭建好kafka集群,這里演示下單機模式下的3節點kafka偽集群搭建程序
1、解壓安裝包
tar -zxvf kafka_2......
2、創建一個data目錄,并在data目錄下創建4個子目錄
這些目錄分別用于存盤集群中各個kafka實體的資料

3、進入kafka主目錄下的config目錄
將該目錄下的server.properties 再復制出3份,偽集群模式,只需要啟動的時候指明組態檔即可

4、修改第3步中的4個組態檔
以server.properties為例進行說明,只需要修改其中幾個關鍵的引數即可,參考如下配置
broker.id=1 #每個實體的唯一標識,不能重復,本例建議數字依次遞增即可
listeners=PLAINTEXT://IP:9092 #云服務器這里設定為內網IP
advertised.listeners=PLAINTEXT://IP:9092 #云服務器這里設定為外網IP (如果是虛擬機,這個可以不用設定)
log.dirs=/usr/local/soft/kafka/datas/data1 #資料存放目錄
zookeeper.connect=IP:2181 #zookeeper地址,IP建議使用外網
其他的幾個組態檔,只需要修改各自的 brokerId數字、埠號,資料存放目錄即可,再次強調: brokerId數字,埠號和資料存放目錄一定要改正確,避免出現各種意想不到的問題,這里我們規劃的埠號分別是:9092,9093,9094,9095
5、啟動kafka集群
先啟動zookeeper服務,然后進入kafka的主目錄下,依次執行下面的命令,先啟動3個實體,留下一個實體用于后面的節點服役實驗
./bin/kafka-server-start.sh -daemon ./config/server.properties
./bin/kafka-server-start.sh -daemon ./config/server1.properties
./bin/kafka-server-start.sh -daemon ./config/server2.properties
6、檢查服務狀態
可以看到,kafka集群已經啟動了

如果不放心,可以去zk中檢查下node節點狀況,通過命令列客戶端檢查ids節點下的kafka各個節點,如果出現下面的狀態,說明集群中3個實體已經正常可以使用了

7、創建一個測驗用的topic
./kafka-topics.sh --zookeeper IP:2181 --create --topic zcy222 --partitions 3 --replication-factor 3
然后可以使用下面的命令進行查看topic串列
./kafka-topics.sh --zookeeper IP:2181 --list

然后,使用下面的命令查看下上面創建的這個 zcy222這個主題的情況

通過上面的主題資訊展示情況,可以清楚的看到磁區、副本的純粹情況,到這里,集群搭建完成,同時,前置的準備作業也已經基本完成
接下來,將演示下服役新節點的完整步驟
服役新節點程序
所謂服役新節點,即在現有的集群基礎上,動態擴展一個或多個新的節點,即將新的kafka實體加入到現有的集群節點中,從而起到分攤存盤或增強集群吞吐能力的目的
在上面搭建集群的程序中,我們啟動了3個實體,形成了3節點的kafka集群,另外還有一個server3.properties的組態檔,就是接下來要使用的啟動第四個實體的組態檔
1、再啟動一個kafka實體
進入kafka主目錄,執行下面的命令
./bin/kafka-server-start.sh -daemon ./config/server3.properties
這時可以看到4個kafka實體全部存在了

2、在bin目錄下添加一個即將用于均衡的主題組態檔
配置內容如下,如果主題有多個,在后面繼續追加,用逗號分割即可
{
"topics": [
{"topic": "zcy222"}
],
"version": 1
}
3、生成一個負載均衡的計劃
進入binm目錄下,執行下面的命令,生成一個即將進行分配的計劃
./kafka-reassign-partitions.sh --zookeeper IP:2181 --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3,4" --generate
執行完畢后得到下面的內容提示,得到即將分配的計劃內容

4、創建increase-replication-factor.json檔案
即創建執行副本的檔案,用于下面生成新的分配計劃
在bin目錄下創建increase-replication-factor.json 檔案,將第三步中的計劃內容拷貝到該檔案中

5、執行第四步中的副本計劃
執行下面的命令
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --execute

從上面的輸出日志看到對副本計劃成功做了執行
6、驗證第五步中的副本存盤計劃
執行下面的命令進行驗證
./kafka-reassign-partitions.sh --zookeeper IP:2181 --reassignment-json-file increase-replication-factor.json --verify
可以看到 broker上面這時候存在了1,2,3,4個節點,即節點4也被加入到當前主題的磁區中

7、查看當前主題的磁區以及副本描述資訊
./kafka-topics.sh --zookeeper IP:2181 --describe --topic zcy222
對比上文中第一次執行該命令時候的展示內容,可以發現這時候 isr資訊已經發生了變化

也可以進入到zookeeper的客戶端視窗,查看broker的資訊,已經發生了變化

通過上面的演示,我們成功將一個新節點動態服役到原來的集群下
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/437040.html
標籤:其他
