栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kafka 2.x RecordAccumulator分析 --- 持续更新中

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kafka 2.x RecordAccumulator分析 --- 持续更新中

概念

        KafkaProducer只用一个Send()方法,就可以实现同步/异步处理数据的,Send()返回一个Future对象,基于Future来实现同步/异步。

        同步:即返回Future对象后,立即调用get,阻塞等待结果

        异步:提供Callback函数,Send()执行完,无需等待,服务器完成数据处理后,回调Callback函数。

        而RecordAccumulator作为KafkaProducer的核心类之一,主要是为了提高KafkaProducer的吞吐量,KafkaProducer与Broker之间持有TCP长链接,批量发送数据。即待发送的数据先缓存在RecordAccumulator中,待一定时机,由Sender线程发送到服务器端。

        RecordAccumulator中核心成员变量是 ConcurrentMap> batches; 存储待发送的数据。

为什么Key是TopicPartition?

        我们知道Kafka的最小并发单位是Partition,Partition分为主备(leader/replica)。而只有LeaderPartition有读写能力,ReplicaPartition仅仅是为了高可用,不与client端交互(Producer/Consumer)。

        因此为了提高Producer的吞吐量,Producer与每个LeaderPartition(当然是有待向该Partition发送数据)所在的Broker都有TCP长链接,通过该长链接批量发送数据。

        这样以TopicPartition为Key,Sender在RecordAccumulator中获取发送数据时,会根据TopicPartition找到其Leader所在Broker,转换为 Map>。

分析RecordAccumulator.append()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号