首页 > 解决方案 > spring-kafka 监听器关闭

问题描述

我正在尝试验证当我关闭我的应用程序时(优雅地或以某种激进的方式),kafka-listeners 是否已正常关闭。有人可以指出我处理它的地方吗?我正在查看destroyclose方法,但我无法找到 kafka 客户端注销实际发生的位置。

如果注销时间过长怎么办?或者如果其他一些spring bean关闭钩子需要太多时间?

还有它对当前处理事件的实际意义是什么?如果他们碰巧完成了他们的工作,他们可以在关闭期间提交补偿吗?

我正在使用 spring-kafka 1.3.5 版本。

标签: spring-kafka

解决方案


当前的 1.3.x 版本是 1.3.8;你应该升级。1.3.9 将于 1 月初发布。

当您stop()成为侦听器容器时,容器将以有序的方式停止并处理先前由 a 返回的任何记录pol()(但不会进行进一步的轮询)。但是,您应该确保您的侦听器将在 shutdownTimeout (默认为 10 秒,但可配置)内处理任何剩余的记录。该stop()操作将在这段时间内阻塞,等待容器停止。

对于更现代的版本(2.2.x,目前是 2.2.2),您可以使用ApplicationListeneror@EventListener来使用ContainerStoppedEvent.


推荐阅读