應用進程、消費組、消費者實例的關系
消費組可以有多個消費者實例。

同一進程,同一個消費組不允許有相同的消費者實例。

不同進程,不能創建相同消費者實例,可能產生兩個實例分配到相同的隊列,部分隊列卻沒有消費的情況。

不同進程,不能創建相同消費者實例,如上圖中的實例A,兩個實例均連到Q1跟Q2,但Q3與Q4并無消費。
應用在創建消費者實例時,指定消費者實例名,應用需要保證不同的進程間,同一消費組不能有相同的實例名。或者應用在創建消費者實例時,不指定實例名,RocketMQ會創建唯一的實例名(JAVA SDK),規則是:groupName|ip|pid|線程id|uuid。
同組Consumer訂閱關系一致
RocketMQ 里的一個 Consumer Group 代表一個 Consumer 群組。對于大多數分布式應用來說,一個 Consumer Group 下通常會有多個 Consumer 實例。訂閱關系一致指的是同一個 Consumer Group 下所有 Consumer 實例的處理邏輯必須完全一致,一旦訂閱關系不一致,消息消費的邏輯就會混亂,甚至導致消息丟失。
由于 RocketMQ 的訂閱關系主要由 Topic+Tag 共同組成,因此,保持訂閱關系一致意味著同一個 Consumer group 下所有的實例需在以下兩方面均保持一致:
1.訂閱的 Topic 必須一致。
2.訂閱的 Topic 中的 Tag 必須一致。
實例的創建和銷毀
1.使用CTGFactory進行創建實例【強制規范】。
2.Consumer是重量級的實例,每次創建、銷毀都會消耗系統資源,建議系統 啟動的時候創建,系統退出的時候關閉,禁止每次消費消息都創建新的實例【強制規范】。
多消費組消費
一個Topic,可以使用多個消費組消費消息,每個消費組將在服務端獨立保存進度。
集群消費意味著多個消費者均衡消費Topic的消息,由于經常不同的程序由多個開發者進行研發和調試,如果使用同一個消費組,在調試過程中存在被其他程序消費者消費的可能,因此應該盡量避免多種類型的應用程序使用同一個消費組。
消費位置設置

消費位置重置可通過控制臺進行按時間重置,客戶端必須離線。
堆積量
不建議高堆積量的消費,為了預防出現高堆積的情況,建議:
1.邊生產邊消費,如果消費速度跟不上,增加消費者。
2.消費者一直在線,不要等生產了一段時間再開啟消費者,這樣會造成消費的堆積。