RocketMq设置CONSUME_FROM_LAST_OFFSET的问题

consumer在消费时,会设置从哪里开始消费。
默认是CONSUME_FROM_LAST_OFFSET
设置的值如代码所示。

public enum ConsumeFromWhere {
    /**
     * 一个新的订阅组第一次启动从队列的最后位置开始消费
* 后续再启动接着上次消费的进度开始消费 */ CONSUME_FROM_LAST_OFFSET, @Deprecated CONSUME_FROM_LAST_OFFSET_AND_FROM_MIN_WHEN_BOOT_FIRST, @Deprecated CONSUME_FROM_MIN_OFFSET, @Deprecated CONSUME_FROM_MAX_OFFSET, /** * 一个新的订阅组第一次启动从队列的最前位置开始消费
* 后续再启动接着上次消费的进度开始消费 */ CONSUME_FROM_FIRST_OFFSET, /** * 一个新的订阅组第一次启动从指定时间点开始消费
* 后续再启动接着上次消费的进度开始消费
* 时间点设置参见DefaultMQPushConsumer.consumeTimestamp参数 */ CONSUME_FROM_TIMESTAMP, }

这里要注意代码注释。这个参数只对一个新的consumeGroup第一次启动时有效。
就是说,如果是一个consumerGroup重启,他只会从自己上次消费到的offset,继续消费。这个参数是没用的。 而判断是不是一个新的ConsumerGroup是在broker端判断。
要知道,消费到哪个offset最先是存在Consumer本地的,定时和broker同步自己的消费offset。broker在判断是不是一个新的consumergroup,就是查broker端有没有这个consumergroup的offset记录。

另外,对于一个新的queue,这个参数也是没用的,都是从0开始消费。

所以,让我们困惑的一个问题我已经设置了CONSUME_FROM_LAST_OFFSET,为什么还是重复消费了。
可能你这不是新的consumergroup,也可能是个新的Queue。

你可能感兴趣的:(RocketMq设置CONSUME_FROM_LAST_OFFSET的问题)