Java 如何处理卡夫卡例外?

Java 如何处理卡夫卡例外?,java,error-handling,apache-kafka,apache-zookeeper,Java,Error Handling,Apache Kafka,Apache Zookeeper,我试图故意阻止卡夫卡,以了解它抛出了哪些异常,到目前为止,我得到了以下结果: java.net.ConnectException: Connection refused: no further information java.io.EOFException: null java.nio.channels.ClosedChannelException: null 知道如何在Java中捕获这些异常吗? 捕捉到这些命令后,我想重新启动kafka和/或zookeeper,类似于终端中的以下命令: k

我试图故意阻止卡夫卡,以了解它抛出了哪些异常,到目前为止,我得到了以下结果:

java.net.ConnectException: Connection refused: no further information
java.io.EOFException: null
java.nio.channels.ClosedChannelException: null
知道如何在Java中捕获这些异常吗? 捕捉到这些命令后,我想重新启动kafka和/或zookeeper,类似于终端中的以下命令:

kafka-server-start.sh -daemon config/server.properties
zookeeper/bin/zkServer.sh start
或者有没有其他方法可以正确处理连接错误?
我正在对高级消费者使用Kafka 0.10。

不确定我是否理解您在这里的意图。您想运行Kafka和Zookeeper并确保这两个服务在失败时都重新启动吗?在这种情况下,我不推荐任何java解决方案,而是将它们作为服务与SysV、SystemD或Upstart一起运行,并将它们配置为在出现故障时重新启动。。但我可能误解了你的问题。是的,这是正确的。我想在它失败时重新启动它们。但是有没有办法让应用程序知道发生了故障(除了生成的日志)?因为我似乎无法在我的应用程序中捕捉到它。谢谢您将无法在应用程序中捕获它,因为服务器在不同的jvm中运行,因此您无法看到它抛出的异常。您需要做的是检查product请求的未来,如果发送失败,这些请求将包含异常。对于消费者,我上一次检查.poll()请求将无限期地阻塞(当然,有一个限制,但实际上是无限期的),直到代理返回。当最后一次成功的投票返回时,您需要进行某种检查,以了解这一点。很高兴写一个正确的答案,如果这是你想要的。谢谢Sonke!我试图通过添加一个来自未来的get(1000,TimeUnit.millizes)来捕获producer中的错误。但当我试图故意停止卡夫卡时,我只会收到消费者的警告,即使我为request.timeout.ms和session.timeout.ms指定了1000。它每秒钟都在记录。告诉我java.net.ConnectException和java.nio.channels.ClosedChannelException:null。另外,我没有使用KafkaConsumer,因此我没有轮询,而是使用KafkaStreams。在发送消息后,尝试添加对.flush()的调用。这将一直阻止,直到它们全部成功或失败地完成。在这之后,对所有未来返回call.get(),如果这不会引发异常,则您的消息已发送。