RocketMq設置CONSUME_FROM_LAST_OFFSET的問題

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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容