MST

星途 面试题库

面试题:消息队列在集群环境下的容错与恢复策略

假设你负责维护一个使用Kafka搭建的大规模消息队列集群,该集群有多个broker节点。当其中一个broker节点突然宕机时,Kafka是如何保证消息不丢失并快速恢复服务的?请详细描述Kafka的分区副本机制、选举策略以及在这个过程中Zookeeper扮演的角色。
32.7万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

分区副本机制

  1. 多副本设置:Kafka的每个分区都可以配置多个副本(包括领导者副本和跟随者副本)。领导者副本负责处理该分区的所有读写请求,跟随者副本则从领导者副本同步数据,以保持数据的一致性。
  2. 数据同步:跟随者副本通过向领导者副本发送Fetch请求来获取数据,领导者副本会记录已同步到跟随者副本的最新位置(HW,High Watermark)。只有当领导者副本和跟随者副本都成功写入消息后,这条消息才被认为是已提交的,消费者才能消费到该消息。

选举策略

  1. 领导者选举:当一个broker节点宕机,其上的领导者副本不可用时,Kafka需要从该分区的跟随者副本中选举出一个新的领导者副本。选举过程通常基于ISR(In - Sync Replicas,同步副本集)。只有在ISR中的副本才有资格被选举为领导者。
  2. ISR机制:ISR集合中的副本是与领导者副本保持一定程度同步的跟随者副本。如果一个跟随者副本落后领导者副本太多(由参数 replica.lag.time.max.ms 控制,默认10秒),它会被移出ISR。当ISR中的副本与领导者副本的同步差距缩小到一定范围时,又会被重新加入ISR。选举时,通常选择ISR中第一个副本(按照副本ID排序)作为新的领导者。

Zookeeper扮演的角色

  1. 集群管理:Zookeeper负责维护Kafka集群的元数据,包括broker节点的存活状态、分区的领导者副本分布等信息。当一个broker节点宕机时,Zookeeper会检测到这个变化,并通知其他broker节点。
  2. 选举协调:在领导者选举过程中,Zookeeper提供了一种分布式协调机制。它帮助Kafka确定哪个副本应该成为新的领导者。例如,Kafka通过在Zookeeper上创建临时节点来进行选举投票,最终确定新的领导者。
  3. 状态监控:Zookeeper持续监控集群中各个broker节点的状态,确保整个集群的元数据信息始终保持最新,以便在发生故障时能够快速恢复服务,保证消息不丢失。