文章目录
0. 概述
本文旨在借助对ProduceRequest和MetadataRequest两种请求的请求链路的分析,得出kafka客户端网络模型的通用步骤。
1. KafkaProducer数据发送流程
1.1 宏观流程

-
确认数据要发送到的 topic 的 metadata 是否存在,没有则需要获取相应的 metadata;
metadata持有一些重要信息,如topic有哪些分区,分区的leader副本在哪个节点等等。 -
序列化 record 的 key 和 value;
-
获取该 record 要发送到的 partition,partition有以下几种选择策略:
- 指明partition时,直接将指明的值直接作为 partiton 值;
- 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
- 既没有 partition 值又没有 key 值的情况下,使用round-robin算法,生成随机数与 topic 可用的 partition 总数取余得到 partition 值
-
向 accumulator 中追加 record 数据,accumulator的数据结构如下:
ConcurrentMap<TopicPartition, Deque<ProducerBatch>> batches。
这里写入record,其实是向ProducerBatch持有的MemoryRecordsBuilder所持有的DataOutputStream对象写入key和value的字节数组

最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



