我们将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 :(得分:0)
为可能遇到此问题的人发布答案 -
原因是旧版本的 Kafka Producer。 kafka 生产者将引导服务器作为列表。在旧版本中,为了获取元数据,生产者将尝试以循环方式连接所有服务器。因此,如果其中一个代理出现故障,则发送到此服务器的请求将失败,并且会出现此消息。
解决方案:
注意:Kafka send 方法被阻塞,直到生产者能够写入缓冲区。