如何在Spring Kafka中确认container.stop上的特定偏移量?

时间:2019-12-21 15:31:32

标签: apache-kafka spring-kafka

基本上,已打开登录用户 id = 123 WebSocket 会话,并且已创建并启动了侦听器容器,并记录了主题 notification.user中的记录。 123 发送到客户端,但从未真正调用acknowledgment.acknowledge();

最近查看的通知和相关的偏移量是已知的。我不想存储和管理该数据并寻求补偿。是时候关闭WebSocket会话并停止侦听器容器了,我需要确认一下。因此,它将作为消费者读取的最新偏移量存储在代理中的某个位置。新的WebSocket会话和侦听器容器自然会从该偏移量开始。

到目前为止,我已经尝试过https://docs.spring.io/spring-kafka/reference/html/#seek

的即兴表演
private class MyListener extends AbstractConsumerSeekAware implements AcknowledgingConsumerAwareMessageListener<String, Notification> {

我需要查看一些侦听器容器生命周期和atStop事件吗?

1 个答案:

答案 0 :(得分:1)

如果由于某种原因必须使用手动确认,则由于您收到所有主题/分区/偏移量信息,因此可以通过捕获ConsumerStoppoingEvent来在Consumer上提交偏移量。

  

建议的解决方案与@KafkaListener@EventListener完美配合,但是没有用于以编程方式创建和启动KafkaMessageListenerContainer的事件。

要在Spring不管理容器时将事件发送到事件侦听器,请调用setApplicationEventPublisher(applictionContext)(当ApplicationEventListenerAware bean由Spring管理时,应用程序发布者是应用程序上下文)。

或者您可以简单地注入自己的ApplicationEventPublisher实现并在那里处理事件。