kafka中生产者工作原理

数据发送流程:需要两个线程面main线程和sender线程
发送过程:
1、生产者生产数据之后,数据通过拦截器,序列化器,分区器,发送到线程共享变量RecordAccumulator(默认大小为32M,参数名:buffer.memory)
2、当线程共享变量中的一批数据量达到16k(默认batch.size)或者达到linger.ms(默认为0,单位为ms)时,Sender线程会向RecordAccumulator中拉取数据。
3、根据sender中NetWorkClient接收到的不同broker的请求,通过sender上的selecter将对应的数据发送到对相应的Broker上,注意NetWorkClient对于每个broker发送的请求最多保存5个
4、当Broker上的leader和follower接收到数据之后返回一个ack应答,该ack共有三个界别:0,1,-1(all)
5、若sender迟迟未收到ack则会将数据重新发送(重试的次数默认为int的最大值,参数名:retries),两次重试间隔100ms
6、如果数据发送成功,sender将会清理掉NetWorkClient中已完成的请求,并将RecordAccumulator中对应的数据也清理。

发送流程图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值