本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
重置消費位點是指改變訂閱者當前的消費位置。當消費者出現故障或者消費錯誤數據時,您可通過重置消費位點將消費位置回滾到之前的某個位點,重新開始消費。您也可以將消費位置移動至最新位點,暫時不處理堆積的消息。
背景信息
云消息隊列 RocketMQ 版通過消費位點管理消息的消費進度。每條消息被某個消費者消費完成后不會立即在隊列中刪除,云消息隊列 RocketMQ 版會基于每個Group維護一份消費記錄,該記錄指定了Group下的消費者消費指定Topic時,消費過的最新一條消息的位點,即消費位點。
當消費者客戶端離線又再次重新上線時,會嚴格按照服務端保存的消費進度繼續處理消息。
當消費出現異常或者當前消費位點不符合您的預期時,您可以通過重置消費位點調整您的消費進度。
云消息隊列 RocketMQ 版支持以下方式重置消費位點:
從最新位點開始消費
消費者消費指定Topic中的消息時,會跳過當前堆積(未被消費)的所有消息,從重置操作時間后發送的最新消息開始消費。
從指定時間點的位點開始消費
消費者將從重置時間對應的消費位點之后的消息進行消費,無論這些消息是否已被消費過。
指定時間的選擇范圍為目標Topic中儲存的最早的和最晚的一條消息的生產時間。
重置到某一時刻對應的消費位點,匹配位點時,服務端會根據自動匹配到該時刻最接近的消費位點。
使用場景
消費堆積快速清理:當下游消費系統性能不足或消費速度小于生產速度時,會產生大量堆積消息。若這部分堆積消息可以丟棄,您可以通過重置消費位點快速將消費位點更新到指定位置,繞過這部分堆積的消息,減少下游處理壓力。
業務回溯,糾正處理:由于業務消費邏輯出現異常,消息被錯誤處理。若您希望重新消費這些已被處理的消息,可以通過重置消費位點快速將消費位點更新到歷史指定位置,實現消費回溯。
注意事項
重置消費位點的范圍是重置指定Group對于目標Topic的消費位點,因此不會影響其他訂閱了該Topic的Group的消費進度。
廣播消費模式下不支持重置消費位點。
云消息隊列 RocketMQ 版僅支持重置TCP協議的Group ID的消費位點,不支持重置HTTP協議的Group ID的消費位點。
重置消費位點功能只能重置對消費者可見的消息,不能重置定時中、重試等待中的消息。
重試消費位點只能在消費者在線時進行操作。
操作步驟
登錄云消息隊列 RocketMQ 版控制臺,在左側導航欄單擊實例列表。
在頂部菜單欄選擇地域,如華東1(杭州),然后在實例列表中,單擊目標實例名稱。
在左側導航欄單擊Group 管理,然后單擊TCP 協議頁簽。
找到需要重置消費位點的Group ID,在其操作列單擊更多,然后在下拉菜單中,選擇重置消費位點。
在重置消費位點面板中,選擇需要重置的目標Topic和重置方式,然后單擊確定。
警告若選擇從最新位點開始消費,則Group ID在指定Topic中的堆積消息將被全部清除,該操作大概2~3分鐘后生效,請勿重復操作。期間應用所有的消費者將暫停消費2~3分鐘,對延遲敏感的業務請謹慎使用。
從最新位點開始消費:若選擇此項,該Group ID在消費指定Topic下的消息時會跳過當前堆積(未被消費)的所有消息,從最新消息開始消費。
從指定時間點的位點開始消費:選擇此項后會出現時間選擇控件。請指定一個時間點,消費者將從這個時間點之后發送的消息開始消費,不管之前的消息是否又被消費過。
在彈出的提示對話框,確認提示信息,然后單擊確定。
消費位點重置常見問題
我使用兩種方式重置消費位點均失敗,該怎么處理?
請確認是否為集群消費。廣播模式不支持重置消費位點。
確認當前消費者是否在線。消費者必須在線才能重置消費位點。
確認SDK版本,SDK版本過低也會導致此問題。建議升級SDK至最新版本,針對TCP Java SDK,至少是1.8.0.Final及以上版本。更多信息,請參見版本說明。
我重置消費位點跳過之前堆積的消息,為什么還有部分消息未被重置?
目前重置消息功能對重試中消息不生效,因此重置后仍然可能會有少量重試消息投遞。
通過消費位點重置,最多能重新消費到多久以前的消息?
選擇從指定時間點重置時,可以選擇的最早時間為Topic中最早一條消息的存儲時間,而云消息隊列 RocketMQ 版4.x系列實例的最大消息存儲時長為3天,超過3天的消息會從Topic中被刪除。
因此,通過重置消費位點最多可重新消費到3天前的消息。
相關文檔
除了控制臺,云消息隊列 RocketMQ 版還支持通過API接口重置消費位點。