Kafka:60000 毫秒后无法更新元数据,只有一个代理关闭

Kafka : Failed to update metadata after 60000 ms with only one broker down

我们有一个配置为 -

的 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"。日志中没有其他内容,我们看到了这个错误。在某些时间间隔内,很少有请求被阻止,即使生产者是异步的。

当代理再次启动并且 运行 时,此问题已解决。

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

为可能遇到此问题的人发布答案 -

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

解决方案:

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

注意:Kafka 发送方法被阻塞,直到生产者能够写入缓冲区。