Java 卡夫卡流:错误时退出的正确方法
我已经成功地让streams应用程序消费、转换和生成数据,但我注意到,streams处理器会周期性地转换到Java 卡夫卡流:错误时退出的正确方法,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我已经成功地让streams应用程序消费、转换和生成数据,但我注意到,streams处理器会周期性地转换到错误状态,并且进程将处于该状态而不退出 向我显示以下日志: 所有流线程都已死亡。实例将处于错误状态,应关闭。 有没有办法告诉Streams应用程序在达到错误状态后退出?也许是一个监视器线程 我在Kafka 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此示例在关机挂钩中使用一个闭锁。但您可以在异常处理程序中执行相同的操作: