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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 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岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
5月前
|
消息中间件 负载均衡 Kafka
Kafka消费组重新平衡流程
Kafka消费组重新平衡流程
|
2月前
|
消息中间件 存储 分布式计算
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
43 4
|
2月前
|
消息中间件 缓存 大数据
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
大数据-57 Kafka 高级特性 消息发送相关01-基本流程与原理剖析
50 3
|
5月前
|
消息中间件 Java Kafka
kafka Linux环境搭建安装及命令创建队列生产消费消息
kafka Linux环境搭建安装及命令创建队列生产消费消息
123 4
|
5月前
|
消息中间件 存储 Java
全网把Kafka概念讲的最透彻的文章,别无二家
消息队列老大哥Kafka在官网的介绍是这么说的,真是霸气:全球财富前100强公司有超过80%信任并使用Kafka。Kafka目前在GitHub目前也已经有star数27.6k、fork数13.6k。大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们开启新的一篇Java进阶指南,本期的对象是Kafka。Kafka历史Star趋势图本文收录在我开源的《Java学习面试指南》中,一份涵盖Java程序员所需掌握核心知识、面试重点的Java指南。希望收到大家的 ⭐ Star ⭐支持。
125 1
全网把Kafka概念讲的最透彻的文章,别无二家
|
5月前
|
消息中间件 存储 缓存
面试题Kafka问题之Kafka的生产消费基本流程如何解决
面试题Kafka问题之Kafka的生产消费基本流程如何解决
53 1
|
5月前
|
消息中间件 存储 Kafka
微服务分布问题之Kafka分区的副本和分布如何解决
微服务分布问题之Kafka分区的副本和分布如何解决
|
6月前
|
消息中间件 监控 Java
「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控
本文由北京宝兰德公司解决方案总监徐清康撰写,探讨了Kafka和AutoMQ集群的监控。
250 2
「布道师系列文章」宝兰德徐清康解析 Kafka 和 AutoMQ 的监控
|
6月前
|
消息中间件 Java Kafka
「布道师系列文章」众安保险王凯解析 Kafka 网络通信
本文由众安保险基础平台 Java 开发专家王凯解析 Kafka 网络通信流程,重点关注请求处理和网络通信模型。文中介绍了生产者与消费者与消息队列的交互,以及服务器端的处理步骤,包括 Acceptor、Processor 和 RequestHandler 的工作原理。此外,还讨论了 Kafka 的线程模型,特别是 KafkaApis 在请求处理中的核心作用。最后,文章提到了 AutoMQ 如何通过优化线程模型和 RequestChannel 实现更高效、有序的处理。参考链接包括 Kafka 3.7、Java NIO 教程和 AutoMQ 相关资料。
52 0
「布道师系列文章」众安保险王凯解析 Kafka 网络通信
|
6月前
|
消息中间件 算法 Java
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费
145 0