Kafka 批量增加 Topic 副本数

Kafka 批量增加 Topic 副本数

网上没找到合适的脚本,于是自己写了个

找到副本为 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

根据自己 Kafka 集群的 Broker ID 创建 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 且随机分配在剩余的节点中
    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

执行 reassignment

topic-reassignment.json 最后会多一个逗号,删掉后执行如下命令即可完成所有 Topic 的副本数调整:

kafka-reassign-partitions.sh --zookeeper zk1:2181 --reassignment-json-file topic-reassignment.json --execute
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。