Kafka的分区重分配,可用于broker机器下线前的数据搬迁,topic的副本数增大或减小等。
生成Kafka分区重分配方案
首先,查看当前topic的partition分布情况
kafka-topics --zookeeper zk1:2181 --topic topic_replica_test --describe
假定下面我们想将该topic的partition从broker id为164,165的brokers上移走。
创建topic-reassign.json文件,内容为
{"version":1,"topics":[{"topic":"topic_replica_test"}]}
生成Kafka分区重分配方案
kafka-reassign-partitions --zookeeper zk1:2181 --generate --topics-to-move-json-file topic-reassign.json --broker-list 150,151,152
可以看到,kafka-reassign-partitions工具帮助生成了当前的分区副本的分布方案,以及建议的分区副本的分布方案。
Current partition replica assignment
{"version":1,"partitions":[{"topic":"topic_replica_test","partition":0,"replicas":[164,165,150],"log_dirs":["any","any","any"]},{"topic":"topic_replica_test","partition":2,"replicas":[150,151,164],"log_dirs":["any","any","any"]},{"topic":"topic_replica_test","partition":1,"replicas":[165,150,151],"log_dirs":["any","any","any"]}]}
我们将Current partition replica assignment的备份保存,用于后期回滚操作。
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"topic_replica_test","partition":0,"replicas":[152,150,151],"log_dirs":["any","any","any"]},{"topic":"topic_replica_test","partition":2,"replicas":[151,152,150],"log_dirs":["any","any","any"]},{"topic":"topic_replica_test","partition":1,"replicas":[150,151,152],"log_dirs":["any","any","any"]}]}
我们将Proposed partition reassignment configuration保存到另外一个json文件中(比如project.json),这个就是系统建议的一个可行性分区重分配方案。注意,这里并没有真正执行重分配的动作。
分区重分配操作
然后使用这个project.json重分配方案,正式执行分区重分配。同理,我们也可以保存当前分区分配情况用于备份(前面在生成重分配方案时已经备份过的可以忽略)。
kafka-reassign-partitions --zookeeper zk1:2181 --reassignment-json-file project.json --execute
检查重分配操作的进度
kafka-reassign-partitions --zookeeper zk1:2181 --reassignment-json-file project.json --verify
查看当前topic重分配操作后的partition分布情况
kafka-topics --zookeeper zk1:2181 --topic topic_replica_test --describe
可以看到,这个topic的副本已经从164,165的上移走了,全部落在了150,151,152上。
欢迎关注我的公众号“九万里大数据”,原创技术文章第一时间推送。