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

时间:2018-03-06 20:19:15

标签: java apache-kafka apache-kafka-streams

我已成功获得使用流应用程序来使用,转换和生成数据,但我已经注意到,流处理器会定期转换到状态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

的误用

1 个答案:

答案 0 :(得分:4)

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