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
方法,以执行以下操作:
- 记录错误
- 在原始
KafkaStreams
对象上使用 close
方法关闭流
结果是:
- 异常消息已记录
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
的误用
使用 UncaughtExceptionHandler
是正确的。但是,如果您在处理程序 call-back 中调用 KafkaStreams#close()
,则可能 运行 陷入死锁。因此,您应该只设置一个标志,并在回调之外调用 #close()
,或者您使用 close()
超时。如果超时到期,则强制关闭。
我已经成功地让流应用程序使用、转换和生成数据,但我注意到流处理器会周期性地转换到 ERROR
状态并且进程将停止那里没有退出。
显示如下日志:
All stream threads have died. The instance will be in error state and should be closed.
有没有办法让 Streams 应用程序在达到 ERROR
状态后退出?也许是某种监视器线程?
我在 Kafka Streams 代码的注释中看到 references 用户需要在达到此状态后关闭应用程序,但是,我无法在文档。
有没有简单的方法来执行此关机步骤?
关闭错误的方法可能不正确
我的意图是在 KafkaStreams
对象上设置 UncaughtExceptionHandler
方法,以执行以下操作:
- 记录错误
- 在原始
KafkaStreams
对象上使用close
方法关闭流
结果是:
- 异常消息已记录
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
使用 UncaughtExceptionHandler
是正确的。但是,如果您在处理程序 call-back 中调用 KafkaStreams#close()
,则可能 运行 陷入死锁。因此,您应该只设置一个标志,并在回调之外调用 #close()
,或者您使用 close()
超时。如果超时到期,则强制关闭。