kafka 生产者原理分析

在这里插入图片描述

生产者客户端架构

客户端客户端由mian 线程和 sender 线程协调运行。

主线程有 kafkaProducer 创建消息,通过拦截器、序列化器和分区器处理之后缓存到消息累加器(recordAccumular)。

RecordAccumular 用来缓存消息以便 Sender 线程批量发送,进而减少网络传输提升性能。RecordAccumular 通过 buffer.memory配置缓存大小,默认值 32MB。主线程发送过来的消息追加到 RecordAccumular 的某个分区的双端队列,队列中存储 ProducerBatch,即 Deque<ProducerBatch>。

ProcucerBatch 包含一个或者多个 ProducerRecord,也可以减少网络的请求次数提升整体吞吐量。也可以适当增加 buffer.memory的整体吞吐量。

Sender 从RecordAccumular 获取到消息,将原本<分区,Deque<ProducerBatch>>转换成<Node,List<ProducerBatch>>,Node代表 Kafka broker 节点。Sender 再次将数据转换成<Node,Request>,将 request 请求发给各个 Node.

Request 从 Sender 发送给 Kafka broker 之前 保存在 InFlightRequests,缓存了已经发送但还没有接受到响应的请求,在其中保存形式 Map<NodeId,Deque<Request>>。其中还管理限制请求数量,参数max.in.flight.requests.per.connection,默认值=5,最多只能缓存 5个未响应的请求,超过这个值就不再向这个 Node 发送更多的数据,也说明这个节点负载较大或者出现网络问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值