humkum opened a new issue, #9083: URL: https://github.com/apache/rocketmq/issues/9083
### Before Creating the Bug Report - [X] I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq/discussions). - [X] I have searched the [GitHub Issues](https://github.com/apache/rocketmq/issues) and [GitHub Discussions](https://github.com/apache/rocketmq/discussions) of this repository and believe that this is not a duplicate. - [X] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ. ### Runtime platform environment Ubuntu 18.04 ### RocketMQ version 5.3 ### JDK Version Open_JDK 1.8.0_202 ### Describe the Bug PushConsumer and LitePullConsumer's consumeFromWhere configuration didn't work in follow situation: 1. New created topic 2. New created consumerGroup 3. There are some messages in topic's queue, which are not expired 4. The value of (maxOffset - 0) not over the size the broker thought is in memory. ![image](https://github.com/user-attachments/assets/1f6fc0cd-d591-4390-90f7-f4c018d88a17) ### Steps to Reproduce 1. Create a new Topic 2. Send some messages to the topic 3. Create a new Push/LitePull Consumer, and start to consume message from the topic created, with the consumeFromWhere default configured as ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET 4. We would find that the consumer didn't consume from the last offset, it would consume from the earliest offset 0. ### What Did You Expect to See? The consumer consume from the last offset or consume from the timestamp user configured. ### What Did You See Instead? The consumer consume from the earliest offset 0. ### Additional Context Root cause as follows: When new created consumer first consume from a topic, it would compute the offset from where to pull message. Because the brokers don't have it's consume offset, so the normal offset result should be computed as the consumeFromWhere's value, ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET, ConsumeFromWhere.CONSUME_FROM_EARLIEST_OFFSET,ConsumeFromWhere.CONSUME_FROM_TIMSTAMP, etc. In computePullFromWhereWithException function: the consumer would query offset from the brokers to check if the brokers had the consumer offset. If not, it would set the pull offset to min/max offset or the offset corresponding to the timestamp configured, as follows: ![image](https://github.com/user-attachments/assets/868c5a05-f8bd-4207-99ac-bec4859e0026) But in broker side, it the consumer start pull message for the first time, that there's no consume offset for it. If the min offset equals to 0, and the value of (max offset - min offset) is considered as in memory, the read offset would returned as 0. So the consumer would consume from 0, even it set consumeFromWhere as from last offset or from timestamp. As follows: ![image](https://github.com/user-attachments/assets/12a49414-ef43-4963-8c13-5679cdf1dc23) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@rocketmq.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org