kafka笔记-KafkaProducer

KafkaProducer

1. 主要的成员变量

KafkaThread:producer启动的时候会创建一个线程,这个线程里面有个重要的Sender

Sender:sender也是在producer初始化化的时候创建的,两个重要的东西KafkaClient(即NetWorkClient),还有个重要的东西RecordAccumator

发送数据的时候会调用recordAccumator.append方法,recordAccumator内部有个暂存数据的ConcurrentMap,这里主要维护了一个双端队列,而且队列的成员是ProducerBatch,这里面才是缓存数据的,batch里面又用了MemoryRecordBuilder来缓存数据,append数据的时候最终到append到了memoryRecordBuilder里面,memoryRecordBuilder里面维护了一个DataOutStream类,而这个类的stream是kafka自己实现的ByteBufferOutputSteam,这里面有个byteBuffer,也就是说每次append的时候其实都把数据append到了byteBuffer里面了,所以数据都是缓存到了这个byteBuffer里面的。

每次append完了之后都会判断数据是否缓存到位了,到位了就weakup以下Sender,sender线程调用sendProducerData,这里面会调用accumlator.drain方法,这个方法最终会调用batch的close方法,这个close方法会调用recordsBuilder的close方法,这个就是关键了,在close方法里面会把上面缓存的byteBuffer拿出来最终创建成MemoryRecords

然后会转来调用Sender的sendProduceRequest方法准备发送数据了,最终经过辗转几轮其实最后是meoryRecords的writeTo方法将数据写出去的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值