Kafka Producer配置重试策略

时间:2017-03-02 20:05:12

标签: python apache-kafka kafka-producer-api rsyslog confluent-kafka

需要更改Kafka Producer配置的哪些参数,以便生产者应该: 1)重试n次 2)n间隔后 如果经纪人关闭,则为同一消息。

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

3 个答案:

答案 0 :(得分:1)

您可以将“ 重试”设置为n(次数)。但这还不够,您还需要研究其他配置,否则可能会因此而受到影响或使其失效。

1)如果生产者的 acks = 0 ,则将无法使用。因为   acks = 0→生产者不等待任何形式的确认。在这种情况下,不能保证经纪人已收到该记录。 重试配置未生效,因为无法知道是否发生任何故障

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

3) retry.backoff.ms -尝试重试对给定主题分区的失败请求之前要等待的时间。这样可以避免在某些失败情况下,在紧密循环中重复发送请求。

4) request.timeout.ms -该配置控制客户端等待请求响应的最长时间。如果在超时之前仍未收到响应,则客户端将在必要时重新发送请求,如果重试已用尽,则将使请求失败

5) delivery.timeout.ms -调用send()返回后报告成功或失败时间的上限。这限制了记录在发送之前将被延迟的总时间,等待来自代理的确认的时间(如果期望)以及允许可重发的发送失败的时间。如果遇到不可恢复的错误,重试已用尽,或者生产商可能报告失败,要在此配置之前发送记录。记录将添加到达到较早的交货到期期限的批次中。

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

答案 1 :(得分:0)

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

  1. message.send.max.retries
  2. retry.backoff.ms
  3. 请参阅配置详细信息here

答案 2 :(得分:-1)

我不确定您是否真的可以控制生产者端的重试次数。

让我把我的理解放在这里。如果生产者将在'request.timeout.ms'之后未收到响应,则触发该第一次重试,并且此后的重试间隔为'retry.backoff。 ms',直到达到'delivery.timeout.ms'

您可以在这里https://kafka.apache.org/documentation/#producerconfigs

中找到更多详细信息