MST

星途 面试题库

面试题:消息队列 Kafka副本机制在高可用性场景下的应用及挑战

在高可用性要求较高的场景中,Kafka的副本机制是如何保障数据不丢失和服务不间断的?请详细说明可能面临的挑战,如网络分区、副本同步延迟等,以及相应的应对策略。
42.6万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

Kafka副本机制保障数据不丢失和服务不间断原理

  1. 副本角色:Kafka 集群中每个分区有多个副本,分为一个领导者(Leader)副本和多个追随者(Follower)副本。生产者发送消息到 Leader 副本,Follower 副本从 Leader 副本拉取消息进行同步。消费者也从 Leader 副本读取消息。这种分工确保数据的一致性写入和读取。
  2. 数据同步:Follower 副本定期从 Leader 副本拉取数据,Leader 副本会记录已提交(committed)的消息偏移量(offset)。只有当 Leader 副本和 ISR(In - Sync Replicas,与 Leader 保持同步的副本集合)中的 Follower 副本都成功写入消息,该消息才被认为是已提交的,消费者才能读取到。这样通过多副本冗余存储,即使某个副本所在节点故障,只要 ISR 中有其他副本存活,数据就不会丢失,服务也能继续。

面临的挑战及应对策略

  1. 网络分区
    • 挑战:网络分区可能导致集群被分割成多个子网,部分副本与 Leader 副本失去联系。例如,一个子网中的 Follower 副本无法从 Leader 副本拉取数据,导致数据不同步。如果此时 Leader 所在子网与其他子网隔离,可能会选举出新的 Leader,造成数据不一致风险。
    • 应对策略:Kafka 使用 ISR 机制来应对网络分区。只有在 ISR 中的副本才有资格成为 Leader 候选。当网络分区发生时,若 Leader 与大部分 ISR 副本失去联系,会触发新的 Leader 选举,从 ISR 中的副本中选出新 Leader。并且,Kafka 要求生产者发送消息时,acks 参数设置为“all”(或 -1),确保消息被所有 ISR 副本接收,这样即使网络分区后新 Leader 选举,已提交的数据不会丢失。
  2. 副本同步延迟
    • 挑战:Follower 副本同步延迟可能由多种原因引起,如节点硬件性能差异、网络拥塞等。如果 Follower 副本长时间落后于 Leader 副本,可能导致 ISR 中副本数量减少。当 Leader 发生故障时,可能因为 ISR 中副本过少,无法选举出合适的新 Leader,或者新 Leader 上任后丢失部分数据。
    • 应对策略:Kafka 动态维护 ISR 集合。如果 Follower 副本在一定时间内未向 Leader 副本发送 Fetch 请求或者落后 Leader 副本的消息数超过一定阈值,该 Follower 副本会被移出 ISR。当它重新追上 Leader 副本时,再被重新加入 ISR。此外,通过合理配置副本因子(增加副本数量),可以提高系统容错能力,减少因个别副本同步延迟带来的风险。同时,优化硬件配置、网络环境,减少副本同步延迟发生的概率。