【问题标题】:How can I handle IOException when Kafka is down?Kafka 宕机时如何处理 IOException?
【发布时间】:2017-08-03 21:28:33
【问题描述】:

我正在尝试发布消息,但 Apache Kafka 已关闭。 我该如何处理这样的紧急情况?

KafkaProducer::send() 方法不会抛出任何可以处理的异常。生产者吞下它们并记录错误,所以我被这样的消息淹没了,一切都挂起,直到 Kafka 再次连接。

2014-03-31 09:38:23.752 ERROR o.a.kafka.common.network.Selector - Error in I/O: 
java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_51]
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) ~[na:1.7.0_51]
    at org.apache.kafka.common.network.Selector.poll(Selector.java:205) ~[kafka-clients-0.8.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:212) [kafka-clients-0.8.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:150) [kafka-clients-0.8.1.jar:na]
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]

【问题讨论】:

  • 您碰巧找到了解决方案?对于我正在开发的审计应用来说,这只是一个小负担。

标签: java exception connect apache-kafka


【解决方案1】:

Producer.send(...) 返回的future 上调用get(),或者如果您不想阻止您的代码,请传递callback

try { producer.send(new ProducerRecord("mytopic", key, value)) .get(); // block until acknowledged } catch(Exception e) { // handle message wasn't acknowledged }

【讨论】:

  • 我确定不是:回调和期货是 2014 年 12 月在“新”生产者客户端中的 added。但现在我们有了答案!
【解决方案2】:

我认为您可以做的一件事是使用 try/catch 在您的生产者代码中记录所有 Throwable

【讨论】:

猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
相关资源
最近更新 更多