分区的 Leader 副本选举对用户是完全透明的,它是由 Controller 独立完成的。你需要回答的 是,在哪些场景下,需要执行分区 Leader 选举。每一种场景对应于一种选举策略。当前, Kafka 有 4 种分区 Leader 选举策略。
OfflinePartition Leader 选举:每当有分区上线时,就需要执行 Leader 选举。所谓的分区上 线,可能是创建了新分区,也可能是之前的下线分区重新上线。这是最常见的分区 Leader 选 举场景。 ReassignPartition Leader 选举:当你手动运行 kafka-reassign-partitions 命令,或者是 调用 Admin 的 alterPartitionReassignments 方法执行分区副本重分配时,可能触发此类选 举。假设原来的 AR 是[1,2,3],Leader 是 1,当执行副本重分配后,副本集 合 AR 被设置 成[4,5,6],显然,Leader 必须要变更,此时会发生 Reassign Partition Leader 选举。
PreferredReplicaPartition Leader 选举:当你手动运行 kafka-preferred-replicaelection 命令,或自动触发了 Preferred Leader 选举时,该类策略被激活。所谓的 Preferred Leader,指的是 AR 中的第一个副本。比如 AR 是[3,2,1],那么, Preferred Leader 就是 3。
ControlledShutdownPartition Leader 选举:当 Broker 正常关闭时,该 Broker 上 的所有 Leader 副本都会下线,因此,需要为受影响的分区执行相应的 Leader 选举。
这 4 类选举策略的大致思想是类似的,即从 AR 中挑选首个在 ISR 中的副本,作为新 Leader。当然,个别策略有些微小差异。不过,回答到这种程度,应该足以应付面试官 了。 毕竟,微小差别对选举 Leader 这件事的影响很小。