作者信息:https://home.cnblogs.com/u/huangjiabobk

在运维工作中,kafka follower如何与leader同步数据?

在 Kafka 中,Follower 副本与 Leader 副本之间的数据同步是通过复制机制来实现的。以下是详细的同步过程:

1. Leader 选举

在每个分区中,Kafka 集群会选举一个 Broker 作为 Leader,负责处理所有的写入和读取请求。其他 Broker 就成为该分区的 Follower。

2. 生产者写入数据

生产者将消息写入 Leader 副本。Leader 负责处理写入请求,并将消息追加到其本地日志中。

3. Follower 启动同步线程

一旦某个 Broker 节点被设定为 Follower 节点,它会启动一个数据同步线程 ReplicaFetcherThread,从 Leader 副本节点同步数据。

4. Follower 向 Leader 发送 FETCH 请求

Follower 副本会周期性地向 Leader 节点发送 FETCH 请求,用于从 Leader 获取数据。在等待 Leader 节点的响应过程中,会阻塞当前同步数据线程。

5. Leader 返回数据

当 Follower 副本从 Leader 副本请求数据时,Leader 会返回针对请求分区的数据。Follower 收到响应后,会将这些数据写入到本地对应分区的日志文件中。

6. 更新数据偏移量

当 Leader 副本返回响应数据时,除了包含分区数据外,还包含了和偏移量相关的数据 HW(高水位值)和 LSO(起始偏移量),副本需要根据场景对 Leader 返回的不同偏移量进行更新。

7. 保持同步

Leader 定期检查所有 Follower 的复制进度,确保它们与 Leader 保持同步。Leader 会记录每个分区每个 Follower 的最后一条消息的偏移量(offset)。

8. 故障处理

如果 Leader 发生故障,系统会从 Follower 中选举新的 Leader,确保服务的可用性。新的 Leader 会从其他 Follower 处获取缺失的消息,以保证分区数据的一致性。

9. 日志截断

为了保证分区副本的数据一致性,当分区存在 Leader Epoch 值时,会将副本的本地日志截断到 Leader Epoch 对应的最新位移处。如果分区不存在对应的 Leader Epoch 记录,那么依然使用原来的高水位机制,将日志调整到高水位值处。

10. 批量复制与零拷贝

Follower 可以批量地从 Leader 复制数据,而且 Leader 充分利用磁盘顺序读以及 send file(zero copy)机制,这样极大地提高复制性能。

综上所述,通过以上机制,Kafka 确保了 Follower 副本与 Leader 副本之间的数据同步,从而提高了数据的可靠性和容错性,确保在 Leader 副本发生故障时,能够迅速切换到 Follower 副本继续提供服务。

posted @ 2025-04-08 23:49  黄嘉波  阅读(102)  评论(0)    收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波