https://github.com/alibaba/RocketMQ/issues/259

如果你用的是DefaultMQPushConsumer,默認是ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET
那么,對於你說的重新換了組名,那就是說這個訂閱關系是新的,在broker端沒有記錄.
那么起始消費的位置取決於這個broker上的topic對應的隊列是否上線沒多久且有沒有堆積,
如果上線沒多久且沒有堆積,則從頭消費,否則從隊隊尾開始消費
如果從隊尾消費,有可能你發過的消息是消費不到的

謝謝,但是用得是consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);,上線不久,沒有堆積,當時沒有消費完的消息只有31條,沒有指定tag用的*

上線久不久是指:你的consumequeue只有一個文件, 默認沒改配置的話,一個文件能存30萬條消息,也就是說你這個topic對應的queue的歷史總消息量小於30萬,那才算上線沒多久
沒有堆積是指:你的某個隊列對應的commitlog中的全部消息量的實際大小,小於內存的40%,
也就是說它會假設你全部重新消費某個隊列的所有消息,那么這些消息會全部經過內存,一旦消息量占用內存超過40%,則認為會發生堆積,跟你之前沒有消費完的31條消息沒關系,因為之前你用的group和新的group不是同一個,是兩個無關的消費組。
另外,你指定的是CONSUME_FROM_FIRST_OFFSET, 那么要求從頭消費,從頭的話是指從現有隊列的頭,消息的保留時間默認不修改的話是只保留48小時的,之前的消息就刪掉了

謝謝,這兩個概念明白了,不過其實這是rocket上線以后時間很近的第二次上線,消息3k都不到,內存就更沒那么大了。。。,默認是48小時啊,那記錯了,但是24小時都不到。。。

因為再沒遇到過,不過我猜測大概是因為producer和broker時間差距很大的原因造成消息過時,因為那次上線中同步了一下系統時間,系統時間變化較大
前天上線發現了一次這個情況,更換組名打算重新消費一次剛send的消息,但是並沒有。。。