1、由controller节点监听zk的变动2、处理reassign_partitions节点的数据,将变更的数据写入brokers/topics/{topic}节点3、处理新增副本,发送leaderAndIsr请求4、状态机处理新增副本状态5、更新controllerContext信息为TRS6、判断是否需要重选leader,策略为ReassignPartitionLeaderElectionStrategy7、更新zk及元数据
controller
变更后:{ \"version\
watch
topic_1
admin
reassignPartitionClient
reassignPartitionClient脚本
topic_1-0
ReassignPartitionsCommand
执行脚本:{ \"version\
kafka cluster
broker1
将变更的数据写入zk
写入zk节点数据:{ \"version\
add
根据条件重选leader
KafkaController
write
处理新增副本
reassign_partitions
变更前:{ \"version\
zk
broker3
topics
delete
broker2
brokers