kafka生产者的缓存机制

Kafka生产者客户端通过消息累加器实现缓存,由主线程Producer线程生成消息并存入,Sender线程批量发送。消息累加器使用双端队列结构,每个分区维护一个队列,队列内容由ProducerBatch组成。batch.size参数控制ProducerBatch大小,buffer.memory参数限制总缓存空间。Sender线程将缓存消息转换为ProducerRequest发送,并使用InFlightRequests缓存未响应请求。max.in.flight.requests.per.connection参数限制每个连接的并发请求数量,避免消息乱序风险。
摘要由CSDN通过智能技术生成

kafka生产者客户端缓存架构的设计是怎样的?我们先整体看下发送消息到java资料分服务端的完整过程和架构:

消息累加器

其实,整个生产者客户端是由两个线程协调运行的,一个是主线程Producer线程,一个是Sender线程。由主线程生产消息,然后缓存到消息累加器(RecordAccumulator);而Sender线程则负责从消息累加器中不断获取消息,然后发送到kakfa broker。这个过程大致如下图:

那为什么需要消息累加器呢?直接发送不是更直接?其实主要是用来缓存消息以便Sender线程可以每次批量发送,从而减少网络传输的资源消耗;而数据到服务端,服务端也可以批量写操作,从而减少磁盘I/O资源消耗,可以提升性能。这个设计,也可以运用于我们平时的业务需求场景开发中。

那么消息累加器中的结构是怎样的呢?消息累加器的内部为每个区分维护一个双端队列Deque,队列的内容是ProducerBatch;而ProducerBatch包含了一个或者多个ProducerRecord消息。

ConcurrentMap<TopicPartition, Deque<RecordBatch>> batches;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值