48毫秒后无法更新元数据

时间:2016-11-12 21:01:07

标签: scala apache-kafka

val props = new Properties()
props.put("bootstrap.servers", "foo:9092,bar:9092")
props.put("acks", "all")
props.put("retries", 1)
props.put("batch.size", 10000)
props.put("linger.ms", 5)
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")

try {
   producer.send(new ProducerRecord[String, String](topic, key, msg.toJson)).get()
   true
} catch {
   case ex: Throwable => {
      println(ex)
      false
   }
}

此代码抛出异常

java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 48 ms.\n\tat 
org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.<init>(KafkaProducer.java:686)\n\tat 
org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:449)\n\tat 
org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:339)\

请注意,我正在针对生产群集发布数据,因此它已启动并正在运行,许多应用程序已成功将消息发布到该主题。它只是我的代码无法发布。

2 个答案:

答案 0 :(得分:1)

看起来主机名或端口有问题,因为您无法使用TimeoutException连接您的生产者。您是否尝试使用相同的生产者配置运行kafka-console-producer.sh?它真的适用于那台机器吗?也许,与代理的连接受SSL或SASL保护。不要忘记在config / tools-log4j.properties中打开TRACE日志记录,这将帮助您调试问题。

答案 1 :(得分:0)

我之前得到了相同的超时异常,当我尝试使用控制台生成器发送消息时,我得到了WARN Error while fetching metadata with correlation id 656 : {metadata-1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

对于我自己来说,停止并重新启动经纪人会让一切都恢复正常。