Ch08-Kafka 之选举

Ch08-Kafka 之选举

March 12, 2019
Apache Kafka
kafka

Kafka 选举主要体现在两个地方,一个是 Broker 的选举,另一个是 Partition 的选举。

1. Controller 选举 #

Kafka 中 Controller 的选举的工作依赖于 Zookeeper,所有的 broker 在 Zookeeper 中抢先注册 /controller 如果注册到了,那么该 broker 便是 Controller。

controller

Controller 被选举出来,作为整个 Broker 集群的管理者,管理所有的集群信息和元数据信息。它的职责包括下面几部分:

  • 处理 Broker 节点的上线和下线,包括自然下线、宕机和网络不可达导致的集群变动,Controller 需要及时更新集群元数据,并将集群变化通知到所有的 Broker 集群节点;
  • 创建 Topic 或者 Topic 扩容分区,Controller 需要负责分区副本的分配工作,并主导 Topic 分区副本的 Leader 选举。
  • 管理集群中所有的副本和分区的状态机,监听状态机变化事件,并作出相应的处理。Kafka 分区和副本数据采用状态机的方式管理,分区和副本的变化都在状态机内会引起状态机状态的变更,从而触发相应的变化事件。

2. Partition 选举 #

由 Controller 从 Zookeeper 中读取当前分区的所有 ISR(in-sync replicas) 集合,然后选择一个 Replica 升级为 Leader。目前支持的选择算法有 NoOpLeaderSelectorOfflinePartitionLeaderReassignedPartitionLeaderPreferredReplicaPartitionLeaderControlledShutdownLeader