Java Kafka重试配置和性能影响

Java Kafka重试配置和性能影响,java,apache-kafka,kafka-producer-api,Java,Apache Kafka,Kafka Producer Api,我正在考虑将重试机制设置为覆盖这里和那里的网络漏洞,我认为如果重试机制覆盖几分钟,比如说2-5分钟,就足以解决轻微的网络问题。 根据对此的回答和文档,要设置的配置主要是重试,最大飞行请求数.per.connection(卡夫卡建议设置为1),重试.退避.ms和交付.超时.ms 我担心将max.in.flight.requests.per.connection设置为1可能会影响性能?有人有这方面的经验吗?卡夫卡制作人与代理群集的默认连接数是多少?我在网上找不到有关它的信息。max.in.fligh

我正在考虑将重试机制设置为覆盖这里和那里的网络漏洞,我认为如果重试机制覆盖几分钟,比如说2-5分钟,就足以解决轻微的网络问题。 根据对此的回答和文档,要设置的配置主要是
重试
最大飞行请求数.per.connection
(卡夫卡建议设置为1),
重试.退避.ms
交付.超时.ms

我担心将
max.in.flight.requests.per.connection
设置为1可能会影响性能?有人有这方面的经验吗?卡夫卡制作人与代理群集的默认连接数是多少?我在网上找不到有关它的信息。

max.in.flight.requests.per.connection
事实上,这是有关生产者性能的最重要配置参数之一,特别是生产者的吞吐量和延迟。此参数控制生产者在阻塞前向单个连接上的某个分区发送的最大未确认请求数

换句话说,它将发送一个请求,在收到ACK之前,它不会向代理发送另一个请求(针对该分区)。作为建议,如果不要求对所有邮件进行排序,请不要将此参数设置为1。

关于
重试
及其与此参数的链接:

允许重试而不设置max.in.flight.requests.per.connection 到1可能会更改记录的顺序,因为如果 批处理被发送到单个分区,第一个分区失败并被删除 重试,但第二次成功,则第二批中的记录 可能先出现

因此,卡夫卡并不建议将其设置为1;当您需要订购交货时,建议。如果不需要这样做,请不要将
max.in.flight.requests.per.connection
设置为1,因为制作人的吞吐量确实会降低

在resume中:如果您正在查找事件的有序交付,请将其设置为仅一个

,吞吐量和延迟在将
max.in.flight.requests
从1增加到2时表现出良好的改善

吞吐量

延迟


确认
这里还涉及另一个参数,以及您已经引用的参数,
acks
set的数量

例如,
acks=0
将使
重试
最大飞行时间
参数完全不相关,因为生产者不会等待来自任何代理的任何确认,并且会假定每个请求都成功。就像UDP发送者一样

当acks=0时

1-
重试
无效,因为无法知道是否发生任何故障

2-
max.in.flight
不生效,因为不存在任何可能的未确认请求

将acks设置为高于0,例如,
acks=2
,也会对性能产生直接影响,因为要将请求标识为成功,必须从集群接收2
acks
。这意味着,例如,仅指定1个飞行中请求的生产者的阻塞时间通常会增加,因为它必须等待2条ack消息,然后才能解除阻塞并能够发送该分区的下一个请求


幂等性
关于你的问题还有另一个概念,那就是幂等生产者。这可能是在性能和效率之间实现平衡的最佳选择

假设您设置了一些
重试
,以确保消息正确到达。代理接收到消息,当它向您发送
ack
时,网络错误使您的制作人无法接收该消息。如果设置了重试,
生产者
将再次发送相同的消息,在代理中创建一个重复的消息

Kafka 0.11.0包括对幂等和事务的支持 生产商的能力幂等传递确保 消息只发送一次到特定主题分区 在单个制作人的生命周期内

幂等生产者具有唯一的生产者ID并使用序列ID 对于每条消息,,它允许代理确保它正在提交 按分区排序的无重复邮件

在较新版本的Kafka客户端中,此幂等生产者默认提供5个
max.in.flight.requests
,提高了“旧”方式的性能,以确保交付订单。这也是幂等生产者的最大值(从1到5是飞行中请求的有效范围),在resume中,如果您需要一个有序的、安全的管道,同时保持生产者的高性能,它是最好的选择

幂等生产者引出了这个概念,在链接中有更深入的解释



在简历中,您应该判断用例的需求是什么。问题如下:

是否需要订购交货

重复消息是否可以接受

您是否对吞吐量和延迟进行了评估,认为某些消息丢失/无序是可以接受的

为了在性能和消息排序/成功请求保证之间取得平衡,幂等生产者是否可以满足您的要求



或多或少地恢复了这些配置对生产者的影响,值得一看。

幂等生产者将Integer.MAX\u值默认为