KafkaStreams 无一例外地关闭

Posted

技术标签:

【中文标题】KafkaStreams 无一例外地关闭【英文标题】:KafkaStreams shuts down with no exceptions 【发布时间】:2018-06-18 12:16:42 【问题描述】:

我有四个使用相同应用程序 ID 运行的 Kafka 流应用程序实例。所有输入主题都属于单个分区。为了实现可扩展性,我通过一个具有多个分区的中间虚拟主题传递了它。我已将request.timeout.ms 设置为 4 分钟。

Kafka 实例进入 ERROR 状态,没有抛出任何异常。很难弄清楚确切的问题是什么。有什么想法吗?

[INFO ] 2018-01-09 12:30:11.579 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] StreamThread:939 - stream-thread [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] Shutting down
[INFO ] 2018-01-09 12:30:11.579 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] StreamThread:888 - stream-thread [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] State transition from RUNNING to PENDING_SHUTDOWN.
[INFO ] 2018-01-09 12:30:11.595 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] KafkaProducer:972 - Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.
[INFO ] 2018-01-09 12:30:11.605 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] StreamThread:972 - stream-thread [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] Stream thread shutdown complete
[INFO ] 2018-01-09 12:30:11.605 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] StreamThread:888 - stream-thread [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] State transition from PENDING_SHUTDOWN to DEAD.
[WARN ] 2018-01-09 12:30:11.605 [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] KafkaStreams:343 - stream-client [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4] All stream threads have died. The Kafka Streams instance will be in an error state and should be closed.
[INFO ] 2018-01-09 12:30:11.605 [new-03-cb952917-bd06-4932-8c7e-62986126a5b4-StreamThread-1] KafkaStreams:268 - stream-client [app-new-03-cb952917-bd06-4932-8c7e-62986126a5b4] State transition from RUNNING to ERROR.

【问题讨论】:

尝试注册UncaughtExceptionHandler 以获取更多详细信息:docs.confluent.io/current/streams/developer-guide/… 或将日志级别提高到 DEBUG 是的!日志级别已经处于调试模式,并且有一个 uncaughtExceptionHandler 已经注册到 kafka 流 - 仍然没有记录任何内容。 这很奇怪...Shutting down 消息之前记录了什么? 我有一个自定义的流分区器。从中不断写入一条日志行“EventStreamPartitioner:20 - 代码'isro'和分区'109'”。 我有一个消费者偏移重置工具,它使用 OffsetCommitRequest 更改主题的偏移。我停止了应用程序并使用该工具更改了输入主题和中间主题的偏移量。我有两个经纪人,我将请求发送给了一个经纪人。然后重新启动应用程序,之后它不断进入 ERROR 状态。我认为偏移量更改导致日志文件损坏。一旦我更改了消费者组 ID,它就起作用了。但我仍然不确定偏移量更改后 kafka 日志文件损坏的原因是什么 【参考方案1】:

Thea asker 在 cmets 中分享了他的解决方案:

一旦我更改了消费者组 ID,它就起作用了。

还值得注意的是,最近的版本中已经引入了相关的问题(可能有也可能没有相同的根本原因),现在在 Kafka 版本 2.5.1 和 2.6 中看起来也是fixed。 0 以上。

因此,今天遇到这种情况的人可能想检查他们的版本是否足够高(或低)以避免此问题。

【讨论】:

【参考方案2】:

您可能还需要将 default.production.exception.handler Kafka Streams 属性设置为实现 ProductionExceptionHandler 的类,并且与默认类 DefaultProductionExceptionHandler 不同,它会在触发永久故障状态之前记录错误。

【讨论】:

以上是关于KafkaStreams 无一例外地关闭的主要内容,如果未能解决你的问题,请参考以下文章

线程无一例外地被杀死

Segue 准备好,但性能无一例外地失败

Flask 应用程序无一例外地引发 500 错误

例外是 System.Data.SqlClient.SqlException:'9988' 附近的语法不正确 [关闭]

例外:已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭

KafkaStreams在读取主题时写入磁盘