MST

星途 面试题库

面试题:消息队列 Kafka 高可用性设计中的 ISR 机制

详细解释 Kafka 高可用性设计中 ISR(In - Sync Replicas)机制的工作原理,以及它是如何确保 Kafka 集群在部分节点故障时仍能保持数据的一致性和可用性的。当 ISR 中的副本出现异常时,Kafka 会采取哪些措施进行处理?
36.5万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

ISR 机制工作原理

  1. 副本同步:在 Kafka 集群中,每个分区都有多个副本,其中一个副本被指定为领导者(Leader)副本,其他副本为追随者(Follower)副本。生产者发送消息到 Leader 副本,Follower 副本会定期从 Leader 副本拉取消息进行同步。
  2. ISR 定义:ISR 是一组与 Leader 副本保持“同步”状态的 Follower 副本集合。这里的“同步”意味着 Follower 副本的日志落后 Leader 副本的日志不超过一定的时间或消息数量阈值。只要 Follower 副本能够在规定时间内成功拉取并追加 Leader 副本的消息,就会被认为是同步的,并被包含在 ISR 中。

确保数据一致性和可用性

  1. 数据一致性
    • 只有当 Leader 副本成功将消息写入本地日志,并且 ISR 中的所有副本都成功同步了该消息,生产者才会收到消息已成功发送的确认。这保证了在消息被确认成功发送时,所有“同步”的副本都有该消息,从而确保了数据一致性。
    • 当 Leader 副本发生故障时,Kafka 会从 ISR 中选举一个新的 Leader 副本。由于 ISR 中的副本都是与原 Leader 同步的,新 Leader 能够保证数据的一致性,因为它拥有最新的消息副本。
  2. 可用性
    • Kafka 通过多副本机制,尤其是 ISR 机制,确保即使部分节点故障,只要 ISR 集合中至少有一个副本存活,集群就能够继续提供服务。例如,当 Leader 副本所在节点故障时,从 ISR 中选举新的 Leader 副本,集群仍然可以接收和处理生产者发送的消息以及消费者的请求,从而保证了可用性。

ISR 副本异常处理措施

  1. 副本滞后处理:如果 Follower 副本由于网络延迟、磁盘 I/O 等问题导致落后 Leader 副本过多,超过了设定的阈值,Kafka 会将该 Follower 副本从 ISR 中移除。当该 Follower 副本追上 Leader 副本的进度后,又会被重新加入到 ISR 中。
  2. Leader 故障处理
    • 当 Leader 副本所在节点发生故障时,Kafka 首先会从 ISR 中选举一个新的 Leader 副本。选举算法通常基于副本的偏移量(offset)等因素,选择拥有最新消息的副本作为新 Leader。
    • 如果 ISR 为空,即所有同步副本都发生故障,Kafka 可能会从不在 ISR 中的副本中选举新的 Leader,但这可能会导致数据丢失,因为这些副本可能落后 Leader 较多。为了避免这种情况,Kafka 通常会配置最小 ISR 数量,当 ISR 中的副本数量小于该配置值时,生产者发送消息会被拒绝,直到 ISR 数量恢复到配置值以上,以此来防止数据丢失。