Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡流:错误时退出的正确方法_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 卡夫卡流:错误时退出的正确方法

Java 卡夫卡流:错误时退出的正确方法,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我已经成功地让streams应用程序消费、转换和生成数据,但我注意到,streams处理器会周期性地转换到错误状态,并且进程将处于该状态而不退出 向我显示以下日志: 所有流线程都已死亡。实例将处于错误状态,应关闭。 有没有办法告诉Streams应用程序在达到错误状态后退出?也许是一个监视器线程 我在Kafka Streams代码的注释中看到,用户需要在应用程序达到此状态时关闭应用程序,但是,我在文档中找不到对此任务的提及 有没有一种简单的方法来执行此关闭步骤 可能是错误的潜在错误关闭方式 我的

我已经成功地让streams应用程序消费、转换和生成数据,但我注意到,streams处理器会周期性地转换到
错误状态
,并且进程将处于该状态而不退出

向我显示以下日志:

所有流线程都已死亡。实例将处于错误状态,应关闭。

有没有办法告诉Streams应用程序在达到
错误
状态后退出?也许是一个监视器线程

我在Kafka Streams代码的注释中看到,用户需要在应用程序达到此状态时关闭应用程序,但是,我在文档中找不到对此任务的提及

有没有一种简单的方法来执行此关闭步骤


可能是错误的潜在错误关闭方式 我的意图是在
KafkaStreams
对象上设置
UncaughtExceptionHandler
方法,以执行以下操作:

  • 记录错误
  • 使用原始
    KafkaStreams
    对象上的
    close
    方法关闭流
由此产生的结果是:

  • 将记录异常的消息
  • INFO org.apache.kafka.streams.KafkaStreams。。。从错误到挂起的关机状态转换
  • INFO org.apache.kafka.streams.processor.internals.StreamThread。。。通知关闭
然后,不幸的是,这个过程似乎没有退出


FWIW我觉得这可能是对
setUncaughtExceptionHandler

的滥用,使用
UncaughtExceptionHandler
是正确的。但是,如果在处理程序回调中调用
KafkaStreams#close()
,则可能会遇到死锁。因此,您应该只设置一个标志,并在回调外部调用
#close()
,或者使用带有超时的
close()
。如果超时过期,将强制关机。

这肯定有帮助!我还发现,包括一个闭锁倒计时之后,有助于将其全部关闭。@MatthiasJ.Sax-您能否更具体地使用示例:d此示例在关机挂钩中使用一个闭锁。但您可以在异常处理程序中执行相同的操作: