【问题标题】:Kafka Producer is not retring when Broker is Down当 Broker 关闭时,Kafka Producer 不会撤消
【发布时间】:2017-02-08 10:26:50
【问题描述】:

我已经使用 0.9 版设置了 Kafka,基本配置为 1 个代理 1 个主题和 1 个分区。

以下是我添加的 Producer 配置,用于启用 Producer 的重试。

    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    props.put(ProducerConfig.RETRIES_CONFIG, 5);
    props.put(ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG, 500);
    props.put(ProducerConfig.ACKS_CONFIG, "all");
    props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 500);
    props.put(ProducerConfig.METADATA_MAX_AGE_CONFIG, 50);

我从文件中了解到

设置大于零的值将导致客户端重新发送发送失败并可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。

我的 Broker 和 Zookeeper 都关闭了,重试操作不起作用。

错误 o.s.k.s.LoggingProducerListener - 向主题 TestTopic1 发送消息时引发异常| org.apache.kafka.common.errors.TimeoutException: 500 毫秒后更新元数据失败。

我需要知道我是否在这里遗漏了任何东西才能重试工作。

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    仅当您连接到代理并且在发送消息期间发生了某些事情时,重新发送(重试)才有效。

    因此,如果您的代理已死,则根本没有任何理由发送消息 - 没有连接。这是一个例外。

    【讨论】:

      【解决方案2】:

      我认为重试无论如何都应该有效,即使代理已关闭。这是首先重试的全部原因。毕竟可能是暂时的网络问题。

      Kafka 0.9.0.1 生产者中存在导致重试不起作用的错误。 See here.

      已在 0.9.0.2(尚未发布)和 0.10 中修复。我会将代理升级到 0.10 并重试。

      【讨论】:

      • 我想测试重试功能,因此故意让代理和 Zookeeper 保持关闭。感谢指出这个错误,让我尝试更新到 0.10。
      • 升级到 0.10 后问题依旧。你能告诉我它是如何为你工作的吗?你能告诉我是否需要任何其他更改吗?
      • 你升级生产者和服务器了吗?另外,你怎么知道它没有重试?另外,你什么时候杀死经纪人?我认为最初它需要在那里让制片人工作。您可以尝试在循环中生成消息(带有睡眠),然后在生成时关闭代理?另外,请使用 retry.backoff.ms。也许将其设置为相当高的值,以便您可以确定它实际上正在重试?
      • 我根本没有启动代理。我认为我需要让经纪人保持开启状态,甚至 Artem 在上述评论中也提出了同样的建议。让我在生产时尝试关闭。
      【解决方案3】:

      正如@artem 回答的那样,Kafka 生产者配置并非旨在在代理关闭时重试。它只在瞬态错误期间重试,老实说这几乎没有用。这让我很惊讶为什么 spring-Kafka 没有处理它。 无论如何,为了解决这个问题,我使用 @Retry config 和 springboot 处理了这个问题。详情请查看此 SO 答案:https://stackoverflow.com/a/65248428/6621377

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 2020-04-06
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        相关资源
        最近更新 更多