Kafka 消息发送和消费流程

发送消息

流程如下:

  1. Producer 端直接将消息发送到 Broker 中的 Leader 分区中
  2. Broker 对应的 Leader 分区收到消息会先写入 Page Cache,定时刷盘进行持久化(顺序写入磁盘)
  3. Follower 分区拉取 Leader 分区的消息,并保持与 Leader 分区数据一致,待消息拉取完毕后需要给 Leader 分区回复 ACK 确认消息
  4. Leader 分区与 Follower 分区同步完数据,并收到所有 ISR 中的 Replica 副本的 ACK 后,Leader 分区会给 Producer 回复 ACK 确认消息

消费消息

流程如下:

  1. Consumer 需要通过订阅关系获取到集群元数据, 找到相关 Topic 对应的 Leader 分区的数据,然后通过 Pull 模式主动的去 Kafka 集群中拉取消息
  2. 拉取到消息后进行业务逻辑处理,待处理完成后,会进行 ACK 确认,即提交 Offset 消费位移进度记录。
  3. 最后 Offset 会被保存到 Kafka Broker 集群中的 consumer_offsets 这个 Topic 中,且每个 Consumer 保存自己的 Offset 进度

**注意:**在这个过程中,有个消费者组的概念,多个 Consumer 可以组成一个消费者组即 Consumer Group,每个消费者组都有一个 GroupId。同一个 Consumer Group 中的 Consumer 可以消费同一个 Topic 下不同分区的数据,但是不会出现多个 Consumer 去消费同一个分区的数据。

总结

综上所述,可以得出 Kafka 有三次消息传递的过程:

  1. Producer 端发送消息给 Broker 端
  2. Broker 将消息进行并持久化数据
  3. Consumer 端从 Broker 将消息拉取并进行消费
相关推荐
Jack_David3 小时前
Kafka批量消息发送
java·分布式·kafka
0xDevNull4 小时前
Apache Kafka 完全指南
分布式·kafka
半桶水专家6 小时前
Kafka JMX详解
分布式·kafka
y = xⁿ7 小时前
重生之我创作出了小红书:计数模块 SDS 位图分片与偏移 异步发送
后端·kafka·intellij-idea
阿里云云原生1 天前
悠悠有品:RocketMQ 稳扛核心交易,Kafka 驱动海量数据,支撑高并发游戏饰品交易平台
kafka·rocketmq
若鱼19191 天前
SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递
java·spring·kafka
一叶飘零_sweeeet1 天前
消息队列选型终极指南:Kafka、RocketMQ、RabbitMQ 底层原理与场景化选型全解
架构·kafka·rabbitmq·rocketmq·消息队列选型
heimeiyingwang1 天前
【架构实战】消息队列 Kafka 架构分析
架构·kafka·linq
一叶飘零_sweeeet1 天前
中间件:高可用、高性能、可扩展三大核心设计原则
中间件·架构·kafka
1104.北光c°2 天前
基于Canal + Kafka的高可用关注系统:一主多从关系链
java·开发语言·笔记·分布式·程序人生·kafka·一主多从