上一节我们也提到了Partition reassignment
的出发点——在每个az各添加一个broker后,partition并没有重新分布,新添加的broker上没有partition:
对partition进行reassignment后,会将原来的partition一部分转移到新的broker上,这样新的broker才会有工作负载:
re-assign有多种方式:
kafka-reassign-partitions.sh
本节,我们将使用原生的kafka工具
kafka-reassign-partitions.sh
来进行reassignment:
确定哪些topic集合要进行reassignment,如果是所有topic则要想清楚,因为会对集群产生一定的压力。
使用kafka-reassign-partitions
工具生成reassignment模板并执行。
监控reassignment的状态
我们将对之前创建的test10
这个topic进行reassignment。
kafka-topics --bootstrap-server $KAFKA --describe --topic topic10
注意到所有leader都是id为1,2或3的broker
创建 topics-to-move.json
文件,内容如下(可以添加其他的topic甚至所有topic到这个json):
{
"topics": [
{
"topic": "topic10"
}
],
"version": 1
}
我们将使用kafka-reassign-partitions.sh
的-generate
模式,并传入想移动partition到哪些broker的列表,如果有6个broker则为: “1,2,3,4,5,6”
kafka-reassign-partitions --bootstrap-server $KAFKA --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3,4,5,6" --generate
将Proposed partition reassignment configuration
部分保存为 expand-cluster-reassignment.json
执行更改:
kafka-reassign-partitions --bootstrap-server $KAFKA --reassignment-json-file expand-cluster-reassignment.json --execute
如果成功,会返回 Successfully started reassignment of partitions.
使用和上面一样的命令,只是将--execute
更改为--verify
kafka-reassign-partitions --bootstrap-server $KAFKA --reassignment-json-file expand-cluster-reassignment.json --verify
Status of partition reassignment:
Reassignment of partition topic10-0 is complete.
Reassignment of partition topic10-1 is complete.
Reassignment of partition topic10-2 is complete.
Reassignment of partition topic10-3 is complete.
Reassignment of partition topic10-4 is complete.
Reassignment of partition topic10-5 is complete.
Reassignment of partition topic10-6 is complete.
Reassignment of partition topic10-7 is complete.
Reassignment of partition topic10-8 is complete.
Reassignment of partition topic10-9 is complete.
Clearing broker-level throttles on brokers 5,1,6,2,3,4
Clearing topic-level throttles on topic topic10
最后两行Clearing xxx throttles
表示任务执行完成,此时可以用 kafka-topics.sh
查看新的分布情况:
kafka-topics --bootstrap-server $KAFKA --describe --topic topic10
注意到现在leader是6个broker,不是之前的3个。
如果想回退到之前的parition 分布,可以使用这一部分的json配置:
将其保存为 expand-cluster-reassignment.json
,重新运行 --execute
命令:
kafka-reassign-partitions --bootstrap-server $KAFKA --reassignment-json-file expand-cluster-reassignment.json --execute
回滚完成后,重新回到原来的状态: