全部產品
Search
文件中心

ApsaraMQ for RocketMQ:基本概念

更新時間:Jun 30, 2024

本文主要對雲訊息佇列 RocketMQ 版涉及的專有名詞及術語進行定義和解析,方便您更好地理解相關概念並使用雲訊息佇列 RocketMQ 版

  • Topic

    • 訊息主題,一級訊息類型,通過Topic對訊息進行分類。更多資訊,請參見Topic與Tag最佳實務
  • 訊息(Message)

    • 訊息佇列中資訊傳遞的載體。
  • Message ID

    • 訊息的全域唯一標識,由雲訊息佇列 RocketMQ 版系統自動產生,唯一標識某條訊息。
  • Message Key

    • 訊息的業務標識,由訊息生產者(Producer)設定,唯一標識某個商務邏輯。
  • Tag

    • 訊息標籤,二級訊息類型,用來進一步區分某個Topic下的訊息分類。更多資訊,請參見Topic與Tag最佳實務
  • Producer

    • 訊息生產者,也稱為訊息發行者,負責生產並發送訊息。
  • Producer執行個體

    • Producer的一個對象執行個體,不同的Producer執行個體可以運行在不同進程內或者不同機器上。Producer執行個體安全執行緒,可在同一進程內多線程之間共用。
  • Consumer

    • 訊息消費者,也稱為訊息訂閱者,負責接收並消費訊息。可分為兩類:
      • Push Consumer:訊息由雲訊息佇列 RocketMQ 版推送至Consumer。
      • Pull Consumer:該類Consumer主動從雲訊息佇列 RocketMQ 版拉取訊息。目前僅TCP Java SDK支援該類Consumer。
        重要 如需使用Pull Consumer,請確保您的雲訊息佇列 RocketMQ 版執行個體為企業鉑金版。

      更多資訊,請參見介面和參數說明訂閱訊息

  • 消費位點

    • 每個Topic會有多個分區,每個分區會統計當前訊息的總條數,這個稱為最大位點MaxOffset;分區的起始位置對應的位置叫做起始位點MinOffset。

      雲訊息佇列 RocketMQ 版的Pull Consumer會按順序依次消費分區內的每條訊息,記錄已經消費了的訊息條數,稱為消費位點ConsumerOffset。剩餘的未消費的條數(也稱為訊息堆積量)= 最大位點MaxOffset-消費位點ConsumerOffset。

  • Consumer執行個體

    • Consumer的一個對象執行個體,不同的Consumer執行個體可以運行在不同進程內或者不同機器上。一個Consumer執行個體內配置線程池消費訊息。
  • Group

    • 一類Producer或Consumer,這類Producer或Consumer通常生產或消費同一類訊息,且訊息發布或訂閱的邏輯一致。

  • Group ID

    • Group的標識。
  • 隊列(Message Queue)

    • 即Topic Partition,物理上的概念。每個Topic包含一個或多個隊列。建立Topic時隊列由系統自動分配,不支援自訂修改。
  • 叢集消費

    • 一個Group ID所標識的所有Consumer平均分攤消費訊息。例如某個Topic有9條訊息,一個Group ID有3個Consumer執行個體,那麼在叢集消費模式下每個執行個體平均分攤,只消費其中的3條訊息。更多資訊,請參見叢集消費和廣播消費
  • 廣播消費

    • 一個Group ID所標識的所有Consumer都會各自消費某條訊息一次。例如某個Topic有9條訊息,一個Group ID有3個Consumer執行個體,那麼在廣播消費模式下每個執行個體都會各自消費9條訊息。更多資訊,請參見叢集消費和廣播消費
  • 定時訊息

    • Producer將訊息發送到雲訊息佇列 RocketMQ 版服務端,但並不期望這條訊息立馬投遞,而是延遲到在目前時間點之後的某一個時間投遞到Consumer進行消費,該訊息即定時訊息。更多資訊,請參見定時和延時訊息
  • 延時訊息

    • Producer將訊息發送到雲訊息佇列 RocketMQ 版服務端,但並不期望這條訊息立馬投遞,而是延遲一定時間後才投遞到Consumer進行消費,該訊息即延時訊息。更多資訊,請參見定時和延時訊息
  • 事務訊息

    • 雲訊息佇列 RocketMQ 版提供類似XA或Open XA的分布事務功能,通過雲訊息佇列 RocketMQ 版的事務訊息能達到分散式交易的最終一致。更多資訊,請參見事務訊息
  • 順序訊息

    • 雲訊息佇列 RocketMQ 版提供的一種按照順序進行發布和消費的訊息類型,分為全域順序訊息和分區順序訊息。更多資訊,請參見順序訊息
  • 全域順序訊息

    • 對於指定的一個Topic,所有訊息按照嚴格的先入先出(FIFO)的順序進行發布和消費。更多資訊,請參見順序訊息
  • 分區順序訊息

    • 對於指定的一個Topic,所有訊息根據Sharding Key進行區塊分區。同一個分區內的訊息按照嚴格的FIFO順序進行發布和消費。Sharding Key是順序訊息中用來區分不同分區的關鍵字段,和普通訊息的Message Key是完全不同的概念。更多資訊,請參見順序訊息
  • 訊息堆積

    • Producer已經將訊息發送到雲訊息佇列 RocketMQ 版的服務端,但由於Consumer消費能力有限,未能在短時間內將所有訊息正確消費掉,此時在雲訊息佇列 RocketMQ 版的服務端儲存著未被消費的訊息,該狀態即訊息堆積。
    • 訊息堆積量=處理中訊息量+已就緒訊息量,具體的指標含義,可參考以下說明:隊列訊息狀態

      上圖表示指定主題的某一隊列中各訊息的狀態,雲訊息佇列 RocketMQ 版將處於不同處理階段的訊息數量和耗時進行統計,這些指標可直接反映隊列中訊息的處理速率和堆積情況,通過觀察這些指標可初步判斷業務的消費是否異常。具體的指標含義和計算公式如下:

      分類

      指標

      定義

      計算公式

      訊息數量指標

      處理中的訊息(inflight messages)

      在消費者用戶端正在處理,但用戶端還未返回消費結果的訊息。

      最晚一條拉取訊息的位點-最晚一條提交訊息的位點

      已就緒的訊息(ready messages)

      訊息在雲訊息佇列 RocketMQ 版服務端已就緒,對消費者可見可被消費的訊息。

      最大訊息位點-最晚一條拉取訊息的位點

      訊息堆積量(consumer lag)

      所有未處理完成的訊息量。

      處理中訊息量+已就緒訊息量

      訊息耗時指標

      已就緒訊息的就緒時間(ready time)

      • 普通訊息、順序訊息:訊息儲存到服務端的時間。

      • 定時/延時訊息:訊息定時或延時結束的時間。

      • 事務訊息:事務提交的時間。

      不涉及

      已就緒訊息的排隊時間(ready message queue time)

      最早一條就緒訊息的就緒時間和當前時刻的時間差。

      該時間反映消費者拉取訊息的及時性。

      目前時間-最早一條就緒訊息的就緒時間

      消費處理延隔時間(comsumer lag time)

      最早一條未消費完成的訊息的就緒時間和當前時刻的時間差。

      該時間反映消費者完成訊息處理的及時性。

      目前時間-最早一條未提交訊息的就緒時間

  • 訊息過濾

    • Consumer可以根據訊息標籤(Tag)對訊息進行過濾,確保Consumer最終只接收被過濾後的訊息類型。訊息過濾在雲訊息佇列 RocketMQ 版的服務端完成。更多資訊,請參見訊息過濾
  • 訊息軌跡

    • 在一條訊息從Producer發出到Consumer消費處理過程中,由各個相關節點的時間、地點等資料匯聚而成的完整鏈路資訊。通過訊息軌跡,您能清晰定位訊息從Producer發出,經由雲訊息佇列 RocketMQ 版服務端,投遞給Consumer的完整鏈路,方便定位排查問題。更多資訊,請參見查詢訊息軌跡
  • 重設消費位點

    • 以時間軸為座標,在訊息持久化儲存的時間範圍內(預設3天),重新設定Consumer對已訂閱的Topic的消費進度,設定完成後Consumer將接收設定時間點之後由Producer發送到雲訊息佇列 RocketMQ 版服務端的訊息。更多資訊,請參見重設消費位點
  • 無效信件佇列

    • 無效信件佇列用於處理無法被正常消費的訊息。當一條訊息初次消費失敗,雲訊息佇列 RocketMQ 版會自動進行訊息重試;達到最大重試次數後,若消費依然失敗,則表明Consumer在正常情況下無法正確地消費該訊息。此時,雲訊息佇列 RocketMQ 版不會立刻將訊息丟棄,而是將這條訊息發送到該Consumer對應的特殊隊列中。

      雲訊息佇列 RocketMQ 版將這種正常情況下無法被消費的訊息稱為死信訊息(Dead-Letter Message),將儲存死信訊息的特殊隊列稱為無效信件佇列(Dead-Letter Queue)。

      相關操作,請參見無效信件佇列