网站建设中什么是一栏,移动网站 案例,wordpress网易云,吾爱wordpress主题xiuPartitionLeaderSelector
通过对前面的分析可知#xff0c;PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现#xff0c;PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。
图展示了PartitionLead…PartitionLeaderSelector
通过对前面的分析可知PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。
图展示了PartitionLeaderSelector的实现类这五个不同的实现提供了不同的策略。PartitionLeaderSelector接口的定义如下 NoOpLeaderSelector是其中最简单的实现它并没有进行Leader选举而是将currentLeaderAndlsr直接返回需要接收LeaderAndIsrRequest的Broker则是分区的AR集合。代码就不贴出来了。
OfflinePartitionLeaderSelector会根据currentLeaderAndlsr选举新的Leader和ISR集合策略如下
如果在ISR集合中存在至少一个可用的副本则从ISR集合中选择新的Leader副本当前ISR集合为新ISR集合。如果ISR集合中没有可用的副本且“Unclean leader election”配置被禁用那么就抛出异常。如果“Unclean leader election”被开启则从AR集合中选择新的Leader副本和ISR集合。如果AR集合中没有可用的副本抛出异常。
对于剩余的PartitionLeaderSelector实现这里只介绍其策略。
PreferredReplicaPartitionLeaderSelector的策略是如果“优先副本”可用且在ISR集合中则选取其为Leader副本当前的ISR集合为新的ISR集合并向AR集合中所有可用副本发送LeaderAndIsrRequest,否则会抛出异常。
ReassignedPartitionLeaderSelector涉及到副本的重新分配副本重新分配的相关概念后面详细分析这里先简单了解ReassignedPartitionLeaderSelector的策略选取的新Leader副本必须在新指定的AR集合中且同时在当前ISR集合中当前ISR集合为新ISR集合接收LeaderAndIsrRequest的副本是新指定的AR集合中的副本。
ControlledShutdownLeaderSelector的策略是从当前ISR集合中排除正在关闭的副本后作为新的ISR集合从新ISR集合中选择新的Leader,需要向AR集合中可用的副本发送LeaderAndIsrRequest。
ReplicaStateMachine
ReplicaStateMachine是Controller Leader用于维护副本状态的状态机。副本状态由ReplicaState接口表示它有七个子类分别代表了副本的七种不同的状态如表所示。 ReplicaState之间的转换如图所示。下面介绍各个ReplicaState状态之间转换时需要完成的相关操作。
NonExistentReplica →NewReplica Controller向此副本所在Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。NewReplica →OnlineReplicaController将NewReplica加入到AR集合中。OnlineReplica,OfflineReplica→OnlineReplica
Controller向此副本所在的Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。
NewReplica,OnlineReplica,OflineReplica,ReplicaDeletionIneligible →OffineReplica Controller向副本所在Broker发送StopReplicaRequest,之后会从ISR集合中清除此副本最后向其他可用副本所在的Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。OffineReplica→ReplicaDeletionStarted Controller向副本所在Broker发送StopReplicaRequest。ReplicaDeletionStarted →ReplicaDeletionSuccessful只做状态转换并没有其他操作。ReplicaDeletionStarted →ReplicaDeletionIneligible只做状态转换并没有其他操作。ReplicaDeletionSuccessful →NonExistentReplicaController从AR集合中删除此副本。 在ReplicaStateMachine中也有controllerContext、zkUtils、brokerRequestBatch字段它们的功能与PartitionStateMachine中的同名字段相同ReplicaStateMachine剩余的字段如下所述。
replicaState:Map[PartitionAndReplica,ReplicaState]类型记录每个副本对应的ReplicaState状态。brokerChangeListener:ZooKeeper的监听器用于监听Broker的变化例如Broker宕机或重新上线等事件。
ReplicaStateMachine启动时会对replicaState集合进行初始化并调用handleStateChanges()方法尝试将可用副本转换为OnlineReplica状态。