在持久性订阅中如何避免消费重复消费呢?

我的测试步骤:
(1)启动生产者,生产50条消息
(2)启动消费者,结合sleep实现慢消费
(3)ctrl+c中止pulsar进程
(4)***************由于Consumer有接收队列,所以并没有因为pulsar进程的销毁而停止消费,每一次都成功的ACK了(ACK状态信息保存在本地了?)
这回导致当重启pulsar和消费者后,会继续上一次的位置开始消费,这样做出现重复消费,
如何避免呢?感谢。

默认的 ACK 机制是无法保证不重复消费的,目前有两种方法能够避免你说的这种情况:

1、创建 consumer 时用 receiverQueueSize(0) 设置接收队列大小为 0,但这样会降低消费时的吞吐量。

2、开启 transaction 支持,具体见官网文档 What are transactions? | Apache Pulsar