Kafka 通过以下机制实现高可用性:
- 分区副本:每个分区都有多个副本,副本中的 Follower 会从 Leader 中同步消息,当 Leader 失效时,某个 Follower 可以快速成为新的 Leader,继续提供服务。
- ISR:每个分区的多个副本中, Kafka 只选择同步进度最接近 Leader 的几个副本构成 ISR(In-Sync Replica) 集合。只有 ISR 中的 Follower 才有资格成为新的 Leader。
- 定期之间选举: Kafka 会定期在 ISR 中选举出一个具有最高优先级的副本作为 PreferredReplica。当 Leader 失效时,PreferredReplica 可以首先尝试成为新的 Leader。
- 失效检测:Kafka 集群有一个 Controller 负责检测各个 Broker 和副本的失效状况,并在发生失效时启用 Leader 选举机制选举新的 Leader。
- 数据同步:Follower 会从 Leader 中同步 binlog 以及其他元数据信息,以保证在 Leader 失效时可以快速成为新的 Leader 提供服务。
例如,某个 Topic 有 3 个分区,每个分区有 2 个副本。其中一个 Follower 同时也是 PreferredReplica。
如果该 Topic 的某个分区的 Leader 失效,Kafka 会首先选举 PreferredReplica 作为新的 Leader。PreferredReplica 已经从旧 Leader 同步了最新的消息和元数据,可以快速继续服务。
如果 PreferredReplica 也失效,Kafka 会在 remaining 的那个 Follower 中选举新的 Leader,但此 Follower 需要从其他副本同步数据才能继续服务,可能会有短暂的服务中断。
理解 Kafka 的高可用机制,可以让我们在日常运维和监控中更好地预测和处理 Kafka 集群中的失效情况,保证服务的连续性。