Kafka:60000毫秒后仅关闭一个代理就无法更新元数据

时间:2020-07-27 06:13:56

标签: apache-kafka kafka-producer-api

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

解决方案:

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

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