本篇我们将介绍Kafka Comsumer Fetcher,与前面我们在介绍Kafka Producer的Sender一样,消费者客户端也有一个拉取线程,从服务器端拉取客户端的请求数据。
Fetcher
根据offset从服务器端获取数据,发送FetchRequest请求获取指定的消息集合,处理FetchResponse,更新消息位置
client:ConsumerNetworkClient,消费者网络通信,发送请求
fetchSize:每次fecth的最大字节数
maxPollRecords:每次获取最大的record数量
metadata:kafka集群元数据
nextInLineRecords:PartitionRecords类型,内部定义了TopicPatition,ComplatedFetch,RecordBatch迭代器
completedFetches:已完成的拉取数据,CompletedFetch类型,内部存储了TopicPartition,fetchOffset,partitionData
// 存储在completedFetches队列中的消息数据还未解析的FetchResponse.PartitionData对象。将CompletedFetch中的消息数据进行解析,得到Record集合并返回;同时还会修改对应TopicPartitionState的position
// sendFetches方法主要是将FetchRequest添加到ConsumerNetworkClient的unsent列表里,等待被发送,并注册FetchResponse处理函数。FetchResponse的处理只要是解析FetchResponse后按照TopicPartition分类,将获取到的消息数据和offset组装成CompletedFetch并添加到CompletedFetches队里。
// 为我们assign的所有分区的对应的节点创建拉取请求,按照node 进行分类,把发往同一节点的所有TopicPartition和PartitionData封装成FetchRequestData
本篇我们分析了Kafka Comsumer 的Fetcher,下一篇我们将介绍Kafka应用篇。
领取专属 10元无门槛券
私享最新 技术干货