本文介紹 SOFAStack 消息隊列的集群消費和廣播消費的基本概念、適用場景以及注意事項。
消息隊列是基于發布/訂閱模型的消息系統。消費者,即消息的訂閱方訂閱關注的 Topic,以獲取并消費消息。由于消費者應用一般是分布式系統,以集群方式部署,因此消息隊列約定以下概念:
集群:使用相同 Group ID 的消費者屬于同一個集群。同一個集群下的消費者消費邏輯必須完全一致(包括 Tag 的使用)。詳情請參見 訂閱關系一致。
集群消費:當使用集群消費模式時,消息隊列認為任意一條消息只需要被集群內(單 Zone 內)的任意一個消費者處理即可。
廣播消費:當使用廣播消費模式時,消息隊列會將每條消息推送給集群內(單 Zone 內)所有注冊過的消費者,保證消息至少被每個消費者消費一次。
集群消費模式
適用于消費端集群化部署,每條消息只需要被處理一次的場景。此外,由于消費進度在服務端維護,可靠性更高。具體消費示例如下圖所示。
注意事項
集群消費模式下,每一條消息都只會被分發到一臺機器上處理。如果需要被集群下的每一臺機器都處理,請使用廣播模式。
集群消費模式下,不保證每一次失敗重投的消息路由到同一臺機器上。
廣播消費模式
適用于消費端集群化部署,每條消息需要被集群下的每個消費者處理的場景。具體消費示例如下圖所示。
注意事項
廣播消費模式下不支持順序消息。
廣播消費模式下不支持重置消費位點。
廣播模式下不支持線下聯調分組消息。
每條消息都需要被相同訂閱邏輯的多臺機器處理。
消費進度在客戶端維護,出現重復消費的概率稍大于集群模式。
廣播模式下,消息隊列保證每條消息至少被每臺客戶端消費一次,但是并不會重投消費失敗的消息,因此業務方需要關注消費失敗的情況。
廣播模式下,客戶端每一次重啟都會從最新消息消費。客戶端在被停止期間發送至服務端的消息將會被自動跳過,請謹慎選擇。
廣播模式下,每條消息都會被大量的客戶端重復處理,因此推薦盡可能使用集群模式。
廣播模式下服務端不維護消費進度,所以消息隊列控制臺不支持消息堆積查詢、消息堆積報警和訂閱關系查詢功能。
更多信息
集群消費模式和廣播消費模式的具體配置方法,請參見以下文檔:
TCP 協議 Java SDK:訂閱消息