Kafka Streams:错误退出的正确方法

Kafka Streams: Proper way to exit on error

我已经成功地让流应用程序使用、转换和生成数据,但我注意到流处理器会周期性地转换到 ERROR 状态并且进程将停止那里没有退出。

显示如下日志:

All stream threads have died. The instance will be in error state and should be closed.

有没有办法让 Streams 应用程序在达到 ERROR 状态后退出?也许是某种监视器线程?

我在 Kafka Streams 代码的注释中看到 references 用户需要在达到此状态后关闭应用程序,但是,我无法在文档。

有没有简单的方法来执行此关机步骤?


关闭错误的方法可能不正确

我的意图是在 KafkaStreams 对象上设置 UncaughtExceptionHandler 方法,以执行以下操作:

结果是:

然后,不幸的是,进程似乎没有退出就挂了。

FWIW 我觉得这可能是对 setUncaughtExceptionHandler

的误用

使用 UncaughtExceptionHandler 是正确的。但是,如果您在处理程序 call-back 中调用 KafkaStreams#close(),则可能 运行 陷入死锁。因此,您应该只设置一个标志,并在回调之外调用 #close(),或者您使用 close() 超时。如果超时到期,则强制关闭。