一 kafka集群擴容比較簡單,機器配置一樣的前提下只需要把配置文件里的brokerid改一個新的啟動起來就可以。比較需要注意的是如果公司內網dns更改的不是很及時的話,需要給原有的舊機器加上新服務器的host,不然可能會產生controller服務器從zk上拿到域名但是解析不到新機器地址的情況。
二 集群擴容后數據是不會自動均衡到新機器上的,需要采用kafka-reassign-partitions.sh這個工具腳本。腳本可以工作在三種模式--generate,--execute,--verify
分別用來生成topic遷移計划文件,執行遷徙計划,查看遷移進度,官方文檔寫的很明白了,不足的地方是每一步都需要手工執行比較麻煩和容易出錯,借用了組內同學之前寫的
一個腳本差不多實現了半自動化還是很提高效率的,備忘一下。
startRebalance.sh
#!/bin/bash
source /etc/profile
source ./conf.sh
echo "zkConf:" $zkServer$clusterName
echo "brokerList:" $brokerIdList
echo "###########################start generate reblance conf##############################"
content=`kafka-reassign-partitions.sh --zookeeper $zkServer$clusterName --topics-to-move-json-file topicmove.conf.multi --broker-list $brokerIdList --generate`
content=`echo $content | awk -F 'Proposed partition reassignment configuration' '{print $2}'`
echo $content
echo $content > ressgintopic.conf
echo $content >> ./log/reblance.log
echo "" >> ./log/reblance.log
echo "###########################end generate reblance conf##############################"
#start reblance
echo "###########################start reblance##############################"
kafka-reassign-partitions.sh --zookeeper $zkServer$clusterName --reassignment-json-file ressgintopic.conf --execute
conf.sh
#!/bin/bash
zkServer=1.1.1.1:2181
clusterName=/kafka/chroot
brokerIdList=1,2,3