Kafka生产者消息发送流程

在这里插入图片描述
整个流程涉及到main和sender两个线程main线程将数据发送到双端队列RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到Broker。

  1. main线程中,数据经过拦截器。(生产环境中一般使用flume中的拦截器,因为配置更简单)
  2. 数据再经过序列化器(java自带的序列化太重了,这里使用Kafka自己的序列化器)
  3. 数据通过分区器确定分区后将数据发往RecordAccumulator。
  4. 数据在分区器中首先会查找是否有自己分区的Deque,有就返回,没有就创建一个并添加进去。
  5. 在Deque发送数据的基本单位是batch,每个batch大小默认16k当batch中数据达到16k或者时间达到linger.ms时间后,sender会从对应Deque中拉取数据发往Broker。这个发送请求会被缓存在Sender线程中的NetworkClient中,每个broker节点对应一个缓存队列,队列长度为5,也就是说每个broker节点最多缓存5个请求。发送成功的话,Deque会将NetworkClient中的缓存删除,然后将这个batch从Deque中删除。发送失败的话,sender会对这个发送请求进行重试(默认重试次数为int最大值,可以自定义)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值