spring-kafka监听关闭

spring-kafka listener shutdown

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

如果注销时间太长会怎样?或者如果其他 spring bean shutdown hook 花费太多时间?

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

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

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

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

使用更现代的版本(2.2.x,当前为 2.2.2),您可以使用 ApplicationListener@EventListener 来消耗 ContainerStoppedEvent