重設消費位點是指改變訂閱者當前的消費位置。當消費者出現故障或者消費錯誤資料時,您可通過重設消費位點將消費位置復原到之前的某個位點,重新開始消費。您也可以將消費位置移動至最新位點,暫時不處理堆積的訊息。
背景資訊
雲訊息佇列 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介面重設消費位點。