Kafka控制器-Broker上下线

在Broker上下线时,控制器对应的监听会读取/brokers/ids/* 下面的Broker列表,并与liveOrShuttingDownBrokerIds比较,得出需要上线/下线的节点。对于上线的节点调用onBrokerStartup()方法,对于下线的节点调用onBrokerFailure()方法。Broker下线时,节点上所有副本对应的状态都会被更改为“下线状态”。假设Broker下线之前,分区的状态为“上线状态”,并且分区主副本在该节点上。此时控制器对于下线后没有主副本的分区处理如下:

1、将这些分区的状态从“上线状态”改为“下线状态”;

2、通过选举器(OfflinePartitionLeaderSelector)为分区选举新的主副本;

3、为分区选举新副本后,发送LeaderAndIsr给分区的所有存活副本;

4、如果选举出主副本,此时将分区的状态从“下线状态”改为“上线状态”;

5、下线节点上所有副本改为“下线状态”。

上面描述步骤的代码实现如下: