Re-assign Partitions

上一节我们也提到了Partition reassignment的出发点——在每个az各添加一个broker后,partition并没有重新分布,新添加的broker上没有partition:

image-20211230075342183

对partition进行reassignment后,会将原来的partition一部分转移到新的broker上,这样新的broker才会有工作负载:

image-20211230075352367

RE-ASSIGN PARTITIONS 实验

re-assign有多种方式:

本节,我们将使用原生的kafka工具 kafka-reassign-partitions.sh来进行reassignment:

  1. 确定哪些topic集合要进行reassignment,如果是所有topic则要想清楚,因为会对集群产生一定的压力。

  2. 使用kafka-reassign-partitions工具生成reassignment模板并执行。

  3. 监控reassignment的状态

我们将对之前创建的test10这个topic进行reassignment。


  1. 获取 partition的分布:
 kafka-topics --bootstrap-server $KAFKA  --describe --topic topic10

image-20211230101113705

注意到所有leader都是id为1,2或3的broker


  1. 确认哪些topic要reassign。

创建 topics-to-move.json文件,内容如下(可以添加其他的topic甚至所有topic到这个json):

{
  "topics": [
    {
      "topic": "topic10"
    }
  ],
  "version": 1
}
  1. 执行reassignment

我们将使用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

image-20211230101528581

执行更改:

kafka-reassign-partitions --bootstrap-server $KAFKA --reassignment-json-file expand-cluster-reassignment.json --execute

如果成功,会返回 Successfully started reassignment of partitions.

image-20211230101703042


  1. 监控reassignment状态:

使用和上面一样的命令,只是将--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

image-20211230101939906

注意到现在leader是6个broker,不是之前的3个。

partition回滚

如果想回退到之前的parition 分布,可以使用这一部分的json配置:

image-20211230102106179

将其保存为 expand-cluster-reassignment.json ,重新运行 --execute 命令:

kafka-reassign-partitions --bootstrap-server $KAFKA --reassignment-json-file expand-cluster-reassignment.json --execute

回滚完成后,重新回到原来的状态:

image-20211230102403836