面试题答案
一键面试副本机制
- 数据冗余保障读写:Kafka 采用多副本机制,每个分区都有一个领导者副本(Leader Replica)和多个追随者副本(Follower Replica)。正常情况下,生产者发送消息到 Leader 副本,消费者从 Leader 副本读取消息。当某个 Kafka 节点出现故障,如果故障节点包含的分区 Leader 副本在该节点上,此时 Follower 副本中保存了与 Leader 副本一致的数据(通过 Leader 副本向 Follower 副本同步数据),可以保障数据不丢失,为选举新 Leader 后恢复正常读写提供数据基础。
- 副本同步机制:Follower 副本会定期从 Leader 副本拉取数据进行同步。Kafka 使用基于日志的复制协议,Follower 副本通过向 Leader 副本发送 Fetch 请求来获取数据更新。在同步过程中,Leader 副本会记录每个 Follower 副本的同步进度,当 Leader 发生故障时,只有那些与 Leader 副本同步程度较好(处于 ISR - In - Sync Replicas 集合中)的 Follower 副本才有资格被选举为新的 Leader ,从而保证新 Leader 上的数据完整性,进而保障消息的正常读写。
选举机制
- 控制器选举:Kafka 集群中有一个控制器(Controller),它负责管理整个集群的分区和副本状态。当某个节点故障时,集群需要重新选举一个新的控制器(如果故障节点是当前控制器)。选举过程基于 ZooKeeper ,每个 Kafka 节点都会在 ZooKeeper 上创建一个临时节点(例如 /controller ),第一个成功创建该节点的 Kafka 节点会成为控制器。控制器负责检测到节点故障后,触发相应分区的 Leader 选举。
- 分区 Leader 选举:当某个包含分区 Leader 副本的节点故障时,控制器会从该分区的 ISR 集合中选举一个 Follower 副本作为新的 Leader 。选举算法通常是选择 ISR 集合中第一个副本(按照副本在 ISR 中的顺序)作为新 Leader 。这样可以确保新 Leader 上的数据是与原 Leader 同步程度较高的,从而保证消息的正常读写。选举完成后,控制器会通知集群中的其他节点新 Leader 的信息,生产者和消费者可以重新连接到新的 Leader 继续进行消息的读写操作,保障了集群的可用性。同时,新 Leader 会开始接收来自生产者的消息,并向其他 Follower 副本同步数据,维持副本之间的数据一致性。如果 ISR 集合为空(极端情况,如网络隔离导致所有 Follower 长时间未与 Leader 同步),Kafka 可以配置从所有存活的副本中选举 Leader ,不过这种情况下可能会丢失少量数据,但仍能保证集群的基本可用性。