【发布时间】:2017-03-30 00:47:33
【问题描述】:
我有一个KafkaProducer 在我尝试发送消息时突然开始抛出 TimeoutExceptions。即使我已将max.block.ms 属性设置为 60000 毫秒,并且测试块为 60 秒,但我收到的错误消息的时间总是小于 200 毫秒。它实际显示 60000 毫秒的唯一一次是我在调试模式下运行它并手动逐步执行 waitOnMetadata 方法。
错误示例:org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 101 ms.
有谁知道为什么它会突然无法更新元数据?我知道这不是我对生产者的实现有问题,因为我不仅没有改变它,因为它正在工作,如果我在另一台服务器上运行我的测试它们都通过了。这可能有什么服务器端原因?我应该重新启动我的经纪人吗?如果我让它运行,为什么超时消息会显示不正确的时间?
生产者设置:
val props = new Properties()
props.put("bootstrap.servers", getBootstrapServersFor(datacenter.mesosLocal))
props.put("batch.size","0")
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
props.put("max.block.ms","60000")
new KafkaProducer[String,String](props)
【问题讨论】:
-
机器是否在 IaaS 环境中托管代理?如果是这样,您最好设置advertedd.host.name 配置并让客户端连接到它们。
-
如果我之前在它工作时没有设置该值,并且我没有在它工作的其他服务器上设置该值,为什么现在设置它会有帮助?
-
你试过用 kafka-console-producer 运行吗?
标签: scala apache-kafka kafka-producer-api