1

我已经使用 0.9 版设置了 Kafka,基本配置为 1 Broker 1 Topic 和 1 Partition。

下面是我添加的 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 都关闭了,重试操作不起作用。

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

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

4

3 回答 3

4

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

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

于 2017-02-08T14:36:15.610 回答
2

我认为重试无论如何都应该起作用,即使经纪人已经关闭。这是首先重试的全部原因。毕竟可能是一个临时的网络问题。

Kafka 0.9.0.1 生产者中有一个错误导致重试不起作用。见这里

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

于 2017-02-09T06:40:24.537 回答
0

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

于 2020-12-12T17:13:36.573 回答