我已成功获得使用流应用程序来使用,转换和生成数据,但我已经注意到,流处理器会定期转换到状态ERROR
并且过程将不会离开而坐在那里。
向我显示以下日志:
All stream threads have died. The instance will be in error state and should be closed.
有没有办法告诉Streams应用程序一旦达到ERROR
状态就退出?也许是各种监视器线程?
我在Kafka Streams代码的注释中看到references一旦用户需要在应用程序达到此状态后关闭应用程序,但是,我还没有找到提及此任务的信息。文档。
有一种简单的方法可以执行此关闭步骤吗?
我的目的是在UncaughtExceptionHandler
对象上设置KafkaStreams
方法,以执行以下操作:
close
对象KafkaStreams
方法关闭流
结果是:
INFO org.apache.kafka.streams.KafkaStreams ... State transition from ERROR to PENDING_SHUTDOWN
INFO org.apache.kafka.streams.processor.internals.StreamThread ... Informed to shut down
然而,不幸的是,这个过程似乎没有退出。
FWIW我觉得这可能是对setUncaughtExceptionHandler
答案 0 :(得分:4)
使用UncaughtExceptionHandler
是正确的。但是,如果在处理程序回调中调用KafkaStreams#close()
,则可能会遇到死锁。因此,您应该只设置一个标志,并在回调之外调用#close()
,或者使用close()
超时。如果超时到期,则强制关闭。