Kafka 批量增加 Topic 副本數(shù)
網(wǎng)上沒找到合適的腳本扳缕,于是自己寫了個
找到副本為 1 的 Topic
cat filter.sh
#!/bin/bash
ZK_HOST=zk1:2181
topics=`kafka-topics.sh --zookeeper $ZK_HOST -list`
for i in $topics;do
replicsNum=`kafka-topics.sh --zookeeper $ZK_HOST -describe --topic $i|grep ReplicationFactor|awk '{print $3}'|awk -F: '{print $2}'`
if [ $replicsNum == 1 ];then
echo $i >> ./topic.txt
fi
done
生成 reassignment.json
根據(jù)自己 Kafka 集群的 Broker ID 創(chuàng)建 leaders.txt,如下所示:
# Broker ID 為 0 1 2
cat leaders.txt
0
1
2
cat run.sh
#!/bin/bash
ZK_HOST=zk1:2181
topics=`cat ./topic.txt`
IFS=$'\n'
echo '{"version":1,"partitions":[' > topic-reassignment.json
for i in $topics;do
leaders=`kafka-topics.sh --zookeeper $ZK_HOST -describe --topic $i|grep Leader`
for leader in $leaders;do
partition=`echo $leader |awk '{print $4}'`
leader=`echo $leader |awk '{print $6}'`
# 用 shuf 保證 副分片 和 主分片 不在同一個 Broker 且隨機(jī)分配在剩余的節(jié)點中
follwer=`grep -vxF $leader ./leaders.txt | shuf -n1`
echo '{"topic":"'$i'","partition":'$partition',"replicas":['$leader','$follwer']},' >> ./topic-reassignment.json
done
done
echo ']}' >> topic-reassignment.json
執(zhí)行 reassignment
topic-reassignment.json 最后會多一個逗號峰尝,刪掉后執(zhí)行如下命令即可完成所有 Topic 的副本數(shù)調(diào)整:
kafka-reassign-partitions.sh --zookeeper zk1:2181 --reassignment-json-file topic-reassignment.json --execute