【问题标题】:Kafka Producer config retry strategyKafka Producer 配置重试策略
【发布时间】:2020-01-27 12:41:46
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1) 如果你有 acks = 0 作为生产者,那么它不会起作用。因为 acks = 0 → 生产者不等待任何类型的确认。在这种情况下,不能保证经纪人已收到记录。 重试配置不生效,因为无法知道是否发生任何故障。

    2) 如果您正在寻找事件的有序交付,那么您需要将 ma​​x.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

    【讨论】:

      【解决方案2】:

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

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

      查看配置详情here

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-18
          • 2017-10-13
          • 2019-11-26
          • 2017-04-27
          • 1970-01-01
          • 1970-01-01
          • 2020-07-03
          相关资源
          最近更新 更多