Kafka生产者配置重试策略



需要更改Kafka生产者配置的哪些参数,以便生产者应:1)重试n2)n间隔后对于同一消息,如果经纪人降低了。

我需要处理与此相关的情况:https://github.com/rsyslog/rsyslog/issues/1052

您可以设置" reties "到n(次数)。但这还不够,您还需要研究其他配置,这些配置可能会因为或不使其有效而受到影响。

1)如果您拥有 acks = 0 对于生产者,则它将行不通。因为 Acks = 0→生产者不等待任何形式的确认。在这种情况下,不能保证经纪人收到记录。重试配置不会生效,因为没有办法知道是否发生任何故障

2)如果您正在寻找事件的有序交付,则需要设置 max.in.flight.requests.per.connection to1。

3) retry.backoff.ms - 试图重试给定主题分区的失败请求之前等待的时间。这避免了在某些故障场景下重复在紧密循环中发送请求。

4) request.timeout.ms - 配置控制客户端将等待请求的响应的最大时间。如果超时之前未收到响应,则客户端将在必要时重新发送请求,或者如果耗尽了请求,请

5) veliver.timeout.ms - 在呼叫发送()返回后报告成功或失败的时间上的上限。这限制了记录在发送之前延迟记录的总时间,等待经纪人确认的时间(如果预期)以及允许进行检索的时间发送失败的时间。生产者可以报告失败要比此config 更早地发送记录,如果遇到了不可撤销的错误,这些重试已经用尽了或记录被添加到达到较早送货到期截止日期的批次中。

参考链接:https://kafka.apache.org/documentation/#producerconfigs

假设您是指Confluent-kafka-python库,我相信您正在寻找的配置是:

  1. message.send.max.tries
  2. retry.backoff.ms

请参阅此处的配置详细信息

我不确定您是否可以真正控制从生产者端的NO恢复。

让我把我的理解放在这里。生产者将在'request.timeout.ms'之后触发第一个重试,如果在此超时时间之前未收到响应,并且随后的重试将以'retry.backoff的间隔为间隔。MS'直到您到达'velrive.timeout.ms'

您可以在此处找到更多详细信息https://kafka.apache.org/documentation/#producerconfigs

最新更新