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)\
请注意,我正在针对生产群集发布数据,因此它已启动并正在运行,许多应用程序已成功将消息发布到该主题。它只是我的代码无法发布。
答案 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)
。
对于我自己来说,停止并重新启动经纪人会让一切都恢复正常。