Kafka篇——生产者端发送消息配置汇总(ACK配置、重试间隔设置以及发送消息缓冲机制)干货满满!细节满满!

ACK配置

生产者同步发送消息的时候,生产者在获得集群返回的ACK前会一直阻塞,那么集群什么时候给生产者返回ACK呢?

在Kafka中,ACK(Acknowledgement)是一种确认机制,用于确保消息的可靠传递。当Producer发送消息给Kafka的一个分区时,Producer可以选择是否等待Broker对消息的接收进行确认。ACK机制提供了三种级别的确认:

1. `acks=0`:Producer发送消息后,不需要等待Broker的确认即可继续发送下一条消息。这种方式是最快的,但也是最不可靠的,因为消息可能会丢失而不被发现。

2. `acks=1`:Producer发送消息后,等待Broker的确认。一旦Broker接收到消息并写入到本地日志中,就会发送ACK给Producer,表示消息已成功写入。在这种级别下,如果Leader Broker接收消息后立即崩溃,并且尚未将消息完全复制到所有ISR(In-Sync Replicas)中,那么消息可能会丢失。

3. `acks=all`:Producer发送消息后,等待所有ISR中的Broker进行确认。只有当所有ISR Broker都接收到消息并写入到本地日志中,才会发送ACK给Producer。这是最可靠的确认级别,因为只有在多个副本都写入成功的情况下,才能确保消息不会丢失。

选择ACK级别时需要权衡消息的可靠性和性能。较低的ACK级别可以提高吞吐量,但会增加消息丢失的风险;较高的ACK级别可以提供更高的可靠性,但会带来较高的延迟。因此,需要根据具体业务需求和实际情况来选择最合适的ACK级别。


在Kaka中,有三种ACK配置方式其中,ack=1是系统默认的配置

在Java中手动配置ACK

重试间隔设置

Kafka提供了重试机制来处理发送失败的消息。当Producer向Kafka发送消息时,如果发生了发送失败的情况,Kafka会根据配置的重试间隔来尝试重新发送消息。

重试间隔是指在发送失败后,等待多久再次尝试发送消息。Kafka的重试间隔可以通过配置参数来设置,常用的参数有以下两个:

  1. retries:表示发送失败后的重试次数,默认值为0。设置为0表示不进行重试,非负数表示进行重试的次数(不包括第一次发送)。每次重试间隔时间递增,按照2的指数进行递增,即第一次重试间隔为retry.backoff.ms,第二次为retry.backoff.ms * 2,以此类推。

  2. retry.backoff.ms:表示重试前等待的初始时间间隔,默认值为100ms。如果设置了retries大于0,则每次重试都会等待一段时间后再尝试发送。这个时间间隔会随着重试次数的增加而指数级增加。

通过设置适当的重试间隔,可以确保在网络或服务中断等临时故障的情况下,Producer能够尽可能多次地尝试发送消息,增加消息发送的成功率。但是需要注意的是,设置过大的重试间隔可能会导致消息发送延迟增加,因此需要根据具体业务需求和实际情况来进行设置。

配置重试间隔的问题见下图注释

发送消息缓冲机制

Kafka的消息缓冲机制是指在Producer端和Consumer端之间存在一个消息缓冲区,用来临时存储消息。这个缓冲区有助于提高系统的吞吐量和性能。

在Producer端,消息缓冲区主要用于临时存储待发送的消息。当Producer产生一条消息时,首先将消息写入到缓冲区中,然后由Kafka的发送线程发送到Kafka集群。这样可以避免每条消息都直接发送到Kafka集群,提高了消息的发送效率。

在Consumer端,消息缓冲区主要用于临时存储从Kafka集群拉取到的消息。当Consumer拉取消息时,将消息先存储到缓冲区中,然后再进行处理。这样可以一次性拉取多条消息,减少了网络传输的开销,提高了消息处理的效率。

Kafka的消息缓冲机制还具有一定的容错能力。当Producer或Consumer发生故障时,已经写入或拉取到的消息仍然保存在消息缓冲区中,待故障恢复后可以重新发送或处理这些消息。

需要注意的是,Kafka的消息缓冲机制并不保证消息的可靠性。一旦消息写入到缓冲区中,就会被认为已经发送成功,但实际上可能由于各种原因导致消息发送失败。因此,在使用Kafka时,还需要根据具体业务需求,选择合适的消息可靠性保证机制,如设置消息的副本数、使用acks参数等。

1、缓冲区和本地线程工作流程图

2、Java中的配置
下面主要是有两个参数比较重要,分别是缓冲区大小和Broker一次性拉取数据量大小

至此,关于Kafka的生产者常见的配置介绍完毕,后续还会持续向该文档中补充更加全面的配置,希望大家能持续的关注~~~~~~

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Be explorer

若认可笔者文章,手头富裕望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值