当Broker倒闭时,Kafka Producer没有倒退

时间:2017-02-08 10:26:51

标签: apache-kafka spring-kafka

我已经使用版本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);

我从文件中了解到

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

我的经纪人和我的经纪人Zookeeper关闭,重试操作无效。

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

我需要知道我是否遗漏了任何重复工作的内容。

3 个答案:

答案 0 :(得分:3)

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

所以,如果你的经纪人已经死了,根本就没有理由发送消息 - 没有连接。这是一个例外。

答案 1 :(得分:2)

我认为即使经纪人失败,重试也应该有效。这是首先重试的全部原因。毕竟可能是一个临时的网络问题。

Kafka 0.9.0.1生产者中存在一个错误,导致重试无效。 See here

已修复0.9.0.2(尚未发布)和0.10。我将经纪人升级到0.10并再试一次。

答案 2 :(得分:0)

@artem回答说,Kafka生产者配置并非旨在在代理关闭时重试。它只会在出现瞬时错误时重试,说实话,这几乎没有用。为什么我不喜欢Spring-Kafka呢? 无论如何要解决这种情况,我用springboot的@Retry config处理了。请检查此SO答案以获取详细信息:https://stackoverflow.com/a/65248428/6621377