彻底搞懂Kafka生产消费流程,这篇文章就够了!

本文涉及的产品
大数据开发治理平台 DataWorks,不限时长
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: ```markdown🚀 Kafka 生产消费流程揭秘:Producer 创建守护线程Sender,消息经拦截器→序列化器→分区器→缓冲区。批量发送基于batch.size或linger.ms条件。acks参数控制可靠性,从0(最快但不可靠)到all(最可靠)。消息重试和元数据返回确保不丢失。关注“软件求生”公众号,探索更多技术!```

Hey, 小伙伴们!今天小米给大家带来一篇关于Kafka生产消费基本流程的揭秘,内容超干货!让我们一起揭开Kafka神秘的面纱,探索它的工作原理吧!

Producer创建及其内部结构

当我们创建一个Kafka Producer时,Kafka会为我们创建一个叫做Sender的线程,并将其设置为守护线程(Daemon Thread)。这个线程的主要工作就是不断地从缓冲区中取出消息并发送给Kafka Broker。守护线程的好处在于,它会随着主线程的结束而自动结束,不需要我们手动去管理它的生命周期。

消息的处理流程

在Producer发送消息的过程中,消息会依次经过以下几个步骤:

  1. 拦截器(Interceptor):首先,消息会通过一系列的拦截器进行处理。拦截器可以用来在消息发送之前或之后做一些额外的操作,比如修改消息内容、统计日志等。
  2. 序列化器(Serializer):然后,消息会经过序列化器,将消息对象转换为字节数组,以便于网络传输。
  3. 分区器(Partitioner):接下来,分区器会根据消息的Key或者其他策略将消息分配到指定的分区上。
  4. 缓冲区(Buffer Pool):最后,消息会被放入到Producer的缓冲区中等待发送。

批次发送的条件

Kafka的Producer会将消息进行批量发送,以提高传输效率和吞吐量。具体的批次发送条件如下:

  • 当缓冲区中的数据大小达到batch.size时,Producer会将这些消息组成一个批次进行发送。
  • 当消息在缓冲区中的等待时间超过linger.ms时,即使缓冲区中的数据大小没有达到batch.size,Producer也会将这些消息组成一个批次进行发送。

消息发送及落盘

当批次发送的条件满足时,Producer会将消息发往指定的分区,然后落盘到Kafka Broker中。消息发送的可靠性可以通过acks参数进行控制:

  • acks=0:acks设置为0时,Producer只要将消息放到缓冲区,就认为消息已经发送完成。这个模式下的消息发送速度最快,但可靠性最低,因为Producer不会等待任何确认,消息有可能会丢失。
  • acks=1:acks设置为1时,消息只需要写到主分区(Leader Partition)即可。在这种情况下,如果主分区收到消息确认之后就宕机了,而副本分区(Follower Partition)还没来得及同步该消息,则该消息会丢失。
  • acks=all(默认):acks设置为all(默认值)时,Leader分区会等待所有的ISR副本分区(In-Sync Replica)确认记录。这种模式下,只要有一个ISR副本分区存活,消息就不会丢失,是可靠性最高的一种设置。

消息重试机制

如果生产者配置了retries参数大于0,并且未收到消息的确认,那么Producer客户端会对该消息进行重试。重试机制能够有效提高消息发送的可靠性,避免由于网络波动或临时故障导致的消息丢失。

消息落盘及元数据返回

当消息成功落盘到Kafka Broker后,Broker会返回生产元数据给Producer。这个元数据包含了消息的主题、分区、偏移量等信息。Producer可以通过这些信息进行消息的追踪和管理。

END

好了,以上就是Kafka生产消费基本流程的详细揭秘啦!希望小伙伴们通过这篇文章对Kafka的工作原理有更深入的了解。如果你对Kafka还有其他疑问或者想要了解更多技术干货,欢迎在评论区留言,小米会及时回复大家哦!

别忘了关注我的公众号,获取更多有趣又实用的技术分享!我们下次见啦!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
2月前
|
消息中间件 大数据 Kafka
【Kafka】Kafka 中生产者运行流程
【4月更文挑战第10天】【Kafka】Kafka 中生产者运行流程
|
4天前
|
消息中间件 存储 Java
全网把Kafka概念讲的最透彻的文章,别无二家
消息队列老大哥Kafka在官网的介绍是这么说的,真是霸气:全球财富前100强公司有超过80%信任并使用Kafka。Kafka目前在GitHub目前也已经有star数27.6k、fork数13.6k。大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们开启新的一篇Java进阶指南,本期的对象是Kafka。Kafka历史Star趋势图本文收录在我开源的《Java学习面试指南》中,一份涵盖Java程序员所需掌握核心知识、面试重点的Java指南。希望收到大家的 ⭐ Star ⭐支持。
全网把Kafka概念讲的最透彻的文章,别无二家
|
20天前
|
消息中间件 监控 Java
「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控
本文由北京宝兰德公司解决方案总监徐清康撰写,探讨了Kafka和AutoMQ集群的监控。
14 2
「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控
|
1月前
|
消息中间件 Java Kafka
「布道师系列文章」众安保险王凯解析 Kafka 网络通信
本文由众安保险基础平台 Java 开发专家王凯解析 Kafka 网络通信流程,重点关注请求处理和网络通信模型。文中介绍了生产者与消费者与消息队列的交互,以及服务器端的处理步骤,包括 Acceptor、Processor 和 RequestHandler 的工作原理。此外,还讨论了 Kafka 的线程模型,特别是 KafkaApis 在请求处理中的核心作用。最后,文章提到了 AutoMQ 如何通过优化线程模型和 RequestChannel 实现更高效、有序的处理。参考链接包括 Kafka 3.7、Java NIO 教程和 AutoMQ 相关资料。
26 0
「布道师系列文章」众安保险王凯解析 Kafka 网络通信
|
18天前
|
消息中间件 算法 Java
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
|
2月前
|
消息中间件 运维 监控
【Kafka】Kafka生产过程中何时会发生QueueFullExpection以及如何处理
【4月更文挑战第11天】【Kafka】Kafka生产过程中何时会发生QueueFullExpection以及如何处理
|
2月前
|
消息中间件 存储 缓存
分布式实时消息队列Kafka(三)生产分区规则
分布式实时消息队列Kafka(三)生产分区规则
45 0
分布式实时消息队列Kafka(三)生产分区规则
|
2月前
|
消息中间件 缓存 监控
Kafka - 3.x 消费者 生产经验不完全指北
Kafka - 3.x 消费者 生产经验不完全指北
41 0
|
2月前
|
消息中间件 存储 缓存
Kafka - 3.x 图解Broker总体工作流程
Kafka - 3.x 图解Broker总体工作流程
106 0
|
2月前
|
消息中间件 Kafka API
Kafka - 图解生产者消息发送流程
Kafka - 图解生产者消息发送流程
105 0