producer线程模型
producer的cpu消耗
- reocrdbatch组装和压缩
- produce request组装和序列化
- 网络发送和数据接收
- callback函数回调
record batch组装
1.从record accumulator 申请 record batch,大小为batch size,申请的recordbatch是可以复用的,
2.将record陆续填充进record batch,record batch中record被存储到连续的内存空间,存储结构按照broker端的数据存储结构组装,在与服务器端版本相同的条件下。 如果record batch满,申请新的record batch。
3. 当recordbatch满后,对recordbatch的数据进行压缩,并计算crc,生成memoryrecord
produce request组装和序列化
1.将符合发送条件的record batch按照broker组合,为了保证发送顺序,每个topic partition只提取一个recordbatch
2.将发送给一个broker的recordbatch组装成produce request
3.将request序列化成Bytebuffer发送
lz4压缩
lz4压缩是在recordbatch填充的同时进行的,当recordbatch的数据量达到64k大小,将执行一次压缩算法。在recordbatch满的时候或者调用recordbatch发送前也会执行一次压缩算法,保证数据都被压缩过
callback函数回调
callback前释放掉 用完的record batch
国内最大最权威的 Kafka中文社区 ,在这里你可以结交各大互联网Kafka大佬以及近2000+Kafka爱好者,一起实现知识共享,实时掌控最新行业资讯,免费加入中~



