Kafka多副本机制
副本和副本因子
Kafka 会为每个 Partition 创建多个副本。这些副本分布在不同的 Broker 上。副本确保了数据的冗余存储,即使某个 Broker 宕机或失效,其他副本可以继续提供服务。
副本因子指的是每个 Partition 有多少个副本。副本因子的设置决定了一个 Partition 会有多少个副本,默认情况下副本因子为 3,表示每个 Partition 有 3 个副本。
Kafka中的副本类型
Leader副本
每个 Partition 都有一个 Leader 副本,它负责处理所有的生产(写入)和消费(读取)请求。所有的生产者和消费者都与 Leader 副本交互,读写操作都通过 Leader 来完成。
Follower副本
其余副本为 Follower 副本,它们被动地从 Leader 副本同步数据。Follower 副本不会直接处理读写请求,只是复制 Leader 副本上的数据。
副本间的数据同步
Follower 副本通过 日志复制 从 Leader 副本获取数据。Kafka 使用 Zookeeper(在新版的 Kafka 中,也可以使用 Kafka 自身的控制器机制)来协调 Leader 和 Follower 副本的同步。Follower 副本会从 Leader 副本拉取数据并存储,确保副本数据一致。Kafka 提供了 同步复制 和 异步复制 机制。
同步复制
指的是在写入数据时,Leader 副本会等待所有同步副本(包括 Follower 副本)确认已经成功接收到数据后,再向生产者返回成功响应。这种方式保证了数据的一致性,但可能会导致较高的延迟。
异步复制
Leader 副本在写入数据后,可以立即返回给生产者,而不等待 Follower 副本的确认。这样可以提高性能,但可能导致数据在某些副本未同步完成时发生故障的情况,造成数据丢失。
副本选举(ISR机制)
Leader 副本会根据 ISR(In-Sync Replicas) 列表来决定哪些副本是最新的。如果 Leader 副本失败,Kafka 会自动从 ISR 中选举一个新的 Leader 副本,继续处理请求,避免服务中断。
ISR(In-Sync Replicas)
ISR表示当前与 Leader 副本保持同步的副本列表。所有同步副本都必须落后于 Leader 副本的数据最大延迟才能被视为 ISR。换句话说,ISR 列表中的副本必须在一定的时间窗口内完成数据的同步才能继续作为可用副本。
副本追赶:如果某个 Follower 副本未能及时同步数据,它会被移出 ISR 列表。只有重新赶上 Leader 副本的数据之后,才能重新进入 ISR 列表。
ISR 保证了 Kafka 的数据一致性和容错能力,只有处于 ISR 列表中的副本才有资格成为新的 Leader 副本。这样,Kafka 可以确保即使发生 Broker 故障,也能快速恢复服务。