Kafka 生产、消费数据的工作流程
1. 生产者写入数据流程
- 生产者先从 zookeeper 的 "/brokers/topics/主题名/partitions/分区名/state"节点找到该 partition 的 leader
- 生产者将消息发送给作为 leader 的 partition
- leader 收到消息后,将消息写入到本地 log 中
- follower 从 leader 上拉取消息,写入到本地 log,并向 leader 发送 ACK
- leader 接收到所有的 ISR 中的 Replica 的 ACK 后,并向生产者返回 ACK
- 生产者收到 leader 的 ACK,证明生产的数据已被 kafka 成功写入
2. 消费者消费数据流程
- kafka 采用拉取模型,由消费者自己记录消费状态,每个消费者互相独立地顺序拉取每个分区的消息
- 消费者可以按照任意的顺序消费消息。比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。
- 每个 consumer 都可以根据分配策略(默认RangeAssignor),获得要消费的分区
- 获取到 consumer 对应的 offset(默认从 ZK 中获取上一次消费的offset)
- 找到该分区的 leader,拉取数据
- 消费者提交 offset
此文章版权归 程序园 所有,如有转载,请注明来自原作者。
评论
ValineDisqus