一文读懂kafka消息拉取机制|线程拉取模型

本文深入探讨Kafka消费者的拉取机制,包括Fetcher的fetchedRecords方法,消费线程模型,以及poll方法的特点。重点讨论fetch.max.bytes,max.partition.fetch.bytes和max.poll.records参数,并指出KafkaConsumer的线程不安全性和并发拉取设计。总结了Kafka顺序消费的最佳实践,同时分享了一套全面的Java开发学习资源。
摘要由CSDN通过智能技术生成
  • 如果客户端与待拉取消息的broker节点有待发送的网络请求(见代码@4),则本次拉取任务将不会再发起新的拉取请求,待已有的请求处理完毕后才会拉取新的消息。

  • 拉取消息时需要指定拉取消息偏移量,来自队列负载算法时指定,主要消费组的最新消费位点。

在这里插入图片描述

Step2:按Node依次构建请求节点,并通过client的send方法将请求异步发送,当收到请求结果后会调用对应的事件监听器,这里主要的是一次拉取最大的字节数50M。

值得注意的是在Kafka中调用client的send方法并不会真正触发网络请求,而是将请求放到发送缓冲区中,Client的poll方法才会真正触发底层网络请求。

Step3:当客户端收到服务端请求后会将原始结果放入到completedFetches中,等待客户端从中解析。

本篇文章暂时不关注服务端对fetch请求的处理,等到详细剖析了Kafka的存储相关细节后再回过来看Fetch请求的响应。

1.2 Fetcher的fetchedRecords方法详解

向服务端发送拉取请求异步返回后会将结果返回到一个completedFetches中,也可以理解为接收缓存区,接下来将从缓存区中将结果解析并返回给消费者消费。从接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值