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的消息,但是并没有。。。