MST

星途 面试题库

面试题:消息队列Kafka中Replication副本机制的作用是什么

请阐述Kafka架构中Replication副本机制对于数据可靠性和高可用性方面的作用,并说明它是如何实现这些作用的。
41.3万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

数据可靠性方面的作用

  1. 防止数据丢失:Kafka 通过在多个副本间复制数据,即使某个副本所在的 broker 发生故障,其他副本仍保存着数据,大大降低了数据丢失的风险。例如,若一个分区有 3 个副本,当其中一个副本所在的 broker 宕机,另外两个副本的数据依然可用,不会导致该分区的数据丢失。
  2. 保证数据一致性:Kafka 采用 ISR(In - Sync Replicas,同步副本集)机制。只有在 ISR 中的副本才被认为是与 leader 副本保持同步的。生产者发送消息到 leader 副本后,只有当 ISR 中的所有副本都成功写入消息,该消息才会被标记为已提交。这样确保了所有已提交消息在各个副本间的一致性。

高可用性方面的作用

  1. 故障快速恢复:当 leader 副本所在的 broker 出现故障时,Kafka 能够从 ISR 中快速选举出新的 leader 副本,使分区继续提供读写服务。例如,假设某分区的 leader 副本在 broker1 上,broker1 突然宕机,Kafka 会从该分区的 ISR 中(比如 ISR 中有 broker2 和 broker3 上的副本)选择一个副本(如 broker2 上的副本)作为新的 leader,从而让该分区迅速恢复正常工作,几乎不影响客户端的读写请求。
  2. 负载均衡:多个副本分布在不同的 broker 上,在一定程度上实现了负载均衡。不同的副本可以分担不同的读写请求,尤其是在 leader 副本负载较高时,其他副本可以接收部分读请求,提高整个集群的处理能力。

实现方式

  1. 副本分配:Kafka 在创建主题时,可以指定每个分区的副本数量以及副本在不同 broker 上的分布。这样可以将副本均匀地分布在整个集群中,避免单个 broker 上副本过多导致的性能瓶颈和单点故障。
  2. 同步机制:leader 副本负责接收生产者发送的消息,并将消息同步给 ISR 中的 follower 副本。follower 副本通过向 leader 副本发送 Fetch 请求来拉取消息,保持与 leader 副本的同步。如果某个 follower 副本落后 leader 副本太多,会被移出 ISR。当该 follower 副本追上 leader 副本时,又会被重新加入 ISR。
  3. 选举机制:当 leader 副本出现故障时,Kafka 的控制器(Controller)会从 ISR 中选举出新的 leader 副本。选举算法通常会选择副本日志最完整且存活的副本作为新的 leader,以保证数据的一致性和连续性。