同一個Topic,換了組名沒有完全重新消費


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

saaavsaaa commented  11 days ago

前天上線發現了一次這個情況,更換組名打算重新消費一次剛send的消息,但是並沒有。。。

 
 
@gaoyf
gaoyf commented  10 days ago •  edited

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

如果從隊尾消費,有可能你發過的消息是消費不到的

 
@saaavsaaa
  
 
saaavsaaa commented  9 days ago

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

 
 
@gaoyf
gaoyf commented  8 days ago •  edited

上線久不久是指:你的consumequeue只有一個文件, 默認沒改配置的話,一個文件能存30萬條消息,也就是說你這個topic對應的queue的歷史總消息量小於30萬,那才算上線沒多久

沒有堆積是指:你的某個隊列對應的commitlog中的全部消息量的實際大小,小於內存的40%,
也就是說它會假設你全部重新消費某個隊列的所有消息,那么這些消息會全部經過內存,一旦消息量占用內存超過40%,則認為會發生堆積,跟你之前沒有消費完的31條消息沒關系,因為之前你用的group和新的group不是同一個,是兩個無關的消費組。

另外,你指定的是CONSUME_FROM_FIRST_OFFSET, 那么要求從頭消費,從頭的話是指從現有隊列的頭,消息的保留時間默認不修改的話是只保留48小時的,之前的消息就刪掉了

 
@saaavsaaa
  
 
saaavsaaa commented  7 days ago

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

 
 
@saaavsaaa
  
 
saaavsaaa commented  a minute ago

因為再沒遇到過,不過我猜測大概是因為producer和broker時間差距很大的原因造成消息過時,因為那次上線中同步了一下系統時間,系統時間變化較大


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM