https://www.99ya.net/archives/517
kafka 擴容 與 partitions 增加
kafka 擴容
* kafka的擴容難點:
1)主要在於增加機器之后,數據需要rebalance到新增的空閑節點,即把partitions遷移到空閑機器上。kafka提供了bin/kafka-reassign-partitions.sh工具,完成parttition的遷移。
2)kafka的集群的數據量加大,數據rebalance的時間較長。解決辦法是把log.retention.hours=1設置一小時(生產參數24小時)。修改參數之后,重啟kakfa節點,kafka會主動purge 1小時之前的log數據。
* 擴容過程
1. 驗證kafka節點是否正常加入集群。
zkCli.sh > ls /kafka/brokers/ids/
2. purge數據,使數據遷移更加快速
1) 替換retent.time,只保留最近一個小時的數據。主要是為了方面topic數據快速遷移。
sed -i 's/log.retention.hours=24/log.retention.hours=1/g' /apps/conf/kafka/server.properties
2)關閉kafka
jps -ml |grep 'kafka.Kafka' | awk '{print $1}' |xargs kill -9
3)驗證kafka進程
jps -ml |grep 'kafka.Kafka' | awk '{print $1}'
4)啟動
kafka-server-start.sh -daemon server.properties jps -ml |grep 'kafka.Kafka' | awk '{print $1}'
3. 增加partitions
因為增加節點,物理機器機器更多,需要增加partition的個數。
bin/kafka-topics.sh --zookeeper 10.1.11.6:2181 --alter --topic all --partitions 24
4. 重新分配parttion(reassign partitions)
1)獲取所有的topic
kafka-topics.sh --list --zookeeper 10.1.11.6:2181
2) reassign partitions**
生成需要遷移的topic partitions信息,broker-list為所有的節點,包括新增節點。
./bin/kafka-reassign-partitions.sh --broker-list "1,2,3" --topics-to-move-json-file move.json --zookeeper 10.1.11.6:2181 --generate
其中topics的json文件內容為:
{"topics": [{"topic": "logstash-product"}], "version":1 }
3)使用上一步生成的建議partition json內容進行完成遷移
“Proposed partition reassignment configuration”后面的內容保存到reassign.json文件中
bin/kafka-reassign-partitions.sh --broker-list "1,2,3" --reassignment-json-file reassign.json --zookeeper 10.1.11.6:2181 --execute
4)修改參數,重啟kafka
sed -i 's/log.retention.hours=1/log.retention.hours=24/g' /apps/conf/kafka/server.properties
至此 kafka 擴容完畢