我正在尝试验证我关闭应用程序时是否正常关闭了kafka-listeners(以优雅的方式或以某种激进的方式)。有人可以指出我要处理的地方吗?我当时在查看destroy
和close
方法,但无法找到kafka客户端注销实际发生的位置。
如果注销花费太多时间会怎样?还是其他一些Spring bean shutdown钩花了太多时间?
对于当前正在处理事件,这实际上意味着什么?如果碰巧完成了工作,他们可以在停机期间进行补偿吗?
我正在使用spring-kafka 1.3.5版本。
答案 0 :(得分:2)
当前的1.3.x版本是1.3.8;您应该升级。 1.3.9将于1月初发布。
当您stop()
使用侦听器容器时,该容器将有序停止并处理pol()
先前返回的所有记录(但不会进行进一步的轮询)。但是,您应确保侦听器将在shutdownTimeout(默认10秒,但可配置)内处理所有剩余记录。 stop()
操作将在该时间段阻塞,等待容器停止。
对于更现代的版本(2.2.x,当前为2.2.2),您可以使用ApplicationListener
或@EventListener
来消耗ContainerStoppedEvent
。