【问题标题】:Kafka : Failed to update metadata after 60000 ms with only one broker downKafka:在 60000 毫秒后更新元数据失败,只有一个代理关闭
【发布时间】:2021-03-15 11:00:04
【问题描述】:

我们有一个 kafka 生产者配置为 -

metadata.broker.list=broker1:9092,broker2:9092,broker3:9092,broker4:9092
serializer.class=kafka.serializer.StringEncoder
request.required.acks=1
request.timeout.ms=30000
batch.num.messages=25
message.send.max.retries=3
producer.type=async
compression.codec=snappy

Replication Factor is 3 and total number of partition currently is 108

其余属性为默认值。

这个制作人运行得非常好。然后,由于某种原因,其中一位经纪人倒下了。然后,我们的生产者开始将日志显示为 - "Failed to update metadata after 60000 ms"。日志中没有其他内容,我们看到了这个错误。在某个时间间隔内,很少有请求被阻塞,即使生产者是异步的。

代理重新启动并运行后,此问题已解决。

这可能是什么原因?根据我的理解,一个经纪人宕机应该不会影响整个系统。

【问题讨论】:

  • 你还在用0.8的producer吗?
  • @MickaelMaison 是的,当前版本是 0.8.2.0。我们正在升级。但是,这在这个版本中是预期的吗?
  • @MickaelMaison 如果是kafka 0.8.2.0版本的bug,那这个版本有什么办法可以暂时解决吗?如果代理是分区领导者,是否会发生这种情况,因此对该分区的所有请求都会失败?什么设置可以解决这个问题?

标签: apache-kafka kafka-producer-api


【解决方案1】:

为可能面临此问题的人发布答案 -

原因是 Kafka Producer 版本较旧。 kafka 生产者将引导服务器作为列表。在旧版本中,为了获取元数据,生产者将尝试以循环方式连接所有服务器。因此,如果其中一个代理宕机,发往该服务器的请求将失败,并会收到此消息。

解决方案:

  • 升级到更新的生产者版本。
  • 可以减少 metadata.fetch.timeout.ms 设置:这将确保主线程不会被阻塞并且发送将很快失败。默认值为 60000 毫秒。更高版本不需要

注意:Kafka 发送方法在生产者能够写入缓冲区之前被阻塞。

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2016-06-12
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多