美文网首页开源技术-MQMQ程序员
RocketMq设置CONSUME_FROM_LAST_OFFS

RocketMq设置CONSUME_FROM_LAST_OFFS

作者: 运维开发笔记 | 来源:发表于2017-11-12 17:18 被阅读58次

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

    public enum ConsumeFromWhere {
        /**
         * 一个新的订阅组第一次启动从队列的最后位置开始消费<br>
         * 后续再启动接着上次消费的进度开始消费
         */
        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,
        /**
         * 一个新的订阅组第一次启动从队列的最前位置开始消费<br>
         * 后续再启动接着上次消费的进度开始消费
         */
        CONSUME_FROM_FIRST_OFFSET,
        /**
         * 一个新的订阅组第一次启动从指定时间点开始消费<br>
         * 后续再启动接着上次消费的进度开始消费<br>
         * 时间点设置参见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_OFFS

        本文链接:https://www.haomeiwen.com/subject/iihomxtx.html