Kafka生产者是如何发送数据的?

生产者发送数据有两个线程:一个是main,一个是sender,main线程主要是将数据放入缓冲区中,sender数据主要是将数据发送到broker.

首先maIn线程线程经过send方法,这个过程中会经过拦截器(对数据进行处理),序列化器(数据需要在不同的节点存储和传递),分区器,这个是指定数据存放在哪个分区,在RecordAccumulator里面有几个分区就有几个队列,这里会将相应的数据放进去。

其次是sender线程,我们知道kafka数据并不是一下就发送到broker里面,因为这样会耗费资源,那什么时候发送数据呢,有两个条件:一个是数据的大小达到batchsize 默认16K,那如果数据迟迟没有达到呢,那这种情况下就一直等下去吗,当然不是,linger.ms设置时间,如果达到了linger.ms,即使数据没有达到batchsize。如何发送呢,sender线程发送数据以节点的方式进行发送,比如broker1,broker2,这里就会有两个队列,这里面有一系列的请求,如果broker1的第一个数据没有发送成功呢?这样是不是会产生阻塞呢,不会,最多可以允许发送5个请求。最后通过selector将链路进行打通,进行发送,broker会有ack应答,如果成功了,会将请求清理掉,同时也会将缓存区的数据清理掉。再解释下ack应答:这里有三种应答策略:0是生产者发送的数据,不需要等数据落盘应答。1是需要leader落盘处理才应答。all(-1)需要leader 和isr队列里面的所有节点收齐数据后应答,-1和all应答。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值