kafka集群扩容以及数据迁移
一 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