1姨俩、RocketMQ 集群物理部署結(jié)構(gòu)
RocketMQ 物理部署結(jié)構(gòu)
RocketMQ的部署結(jié)構(gòu)有以下特點(diǎn):
Name Server是一個(gè)幾乎無狀態(tài)節(jié)點(diǎn),可集群部署调窍,節(jié)點(diǎn)之間無任何信息同步积担。
Broker部署相對(duì)復(fù)雜,Broker分為Master與Slave先誉,一個(gè)Master可以對(duì)應(yīng)多個(gè)Slave的烁,但是一個(gè)Slave只能對(duì)應(yīng)一個(gè)Master,Master與Slave的對(duì)應(yīng)關(guān)系通過指定相同的BrokerName铃芦,不同的BrokerId來定義襟雷,BrokerId為0表示Master,非0表示Slave咧虎。Master也可以部署多個(gè)计呈。每個(gè)Broker與Name Server集群中的所有節(jié)點(diǎn)建立長(zhǎng)連接,定時(shí)注冊(cè)Topic信息到所有Name Server茁彭。
Producer與Name Server集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接扶歪,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master建立長(zhǎng)連接哲嘲,且定時(shí)向Master發(fā)送心跳媳禁。Producer完全無狀態(tài),可集群部署囱怕。
Consumer與Name Server集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接毫别,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master台丛、Slave建立長(zhǎng)連接砾肺,且定時(shí)向Master、Slave發(fā)送心跳侠坎。Consumer既可以從Master訂閱消息裙盾,也可以從Slave訂閱消息,訂閱規(guī)則由Broker配置決定庐完。
2徘熔、RocketMQ 邏輯部署結(jié)構(gòu)
Producer Group
用來表示一個(gè)發(fā)送消息應(yīng)用,一個(gè)Producer Group下包含多個(gè)Producer實(shí)例生音,可以是多臺(tái)機(jī)器窒升,也可以是一臺(tái)機(jī)器的多個(gè)進(jìn)程饱须,或者一個(gè)進(jìn)程的多個(gè)Producer對(duì)象。一個(gè)Producer Group可以發(fā)送多個(gè)Topic消息,Producer Group作用如下:
- 標(biāo)識(shí)一類Producer
- 可以通過運(yùn)維工具查詢這個(gè)發(fā)送消息應(yīng)用下有多個(gè)Producer實(shí)例
- 發(fā)送分布式事務(wù)消息時(shí)锅铅,如果Producer中途意外宕機(jī)减宣,Broker會(huì)主動(dòng)回調(diào)Producer Group內(nèi)的任意一臺(tái)機(jī)器來確認(rèn)事務(wù)狀態(tài)漆腌。
Consumer Group
用來表示一個(gè)消費(fèi)消息應(yīng)用,一個(gè)Consumer Group下包含多個(gè)Consumer實(shí)例塑径,可以是多臺(tái)機(jī)器填具,也可以是多個(gè)進(jìn)程,或者是一個(gè)進(jìn)程的多個(gè)Consumer對(duì)象誉简。一個(gè)Consumer Group下的多個(gè)Consumer以均攤方式消費(fèi)消息枢泰,如果設(shè)置為廣播方式,那么這個(gè)Consumer Group下的每個(gè)實(shí)例都消費(fèi)全量數(shù)據(jù)窿克。
3毛甲、RocketMQ 集群部署模式
1> 單 master 模式
也就是只有一個(gè) master 節(jié)點(diǎn),稱不上是集群玻募,一旦這個(gè) master 節(jié)點(diǎn)宕機(jī)七咧,那么整個(gè)服務(wù)就不可用,適合個(gè)人學(xué)習(xí)使用艾栋。
2> 多 master 模式
多個(gè) master 節(jié)點(diǎn)組成集群蝗砾,單個(gè) master 節(jié)點(diǎn)宕機(jī)或者重啟對(duì)應(yīng)用沒有影響携冤。
優(yōu)點(diǎn):所有模式中性能最高
缺點(diǎn):?jiǎn)蝹€(gè) master 節(jié)點(diǎn)宕機(jī)期間闲勺,未被消費(fèi)的消息在節(jié)點(diǎn)恢復(fù)之前不可用菜循,消息的實(shí)時(shí)性就受到影響。
注意:使用同步刷盤可以保證消息不丟失债朵,同時(shí) Topic 相對(duì)應(yīng)的 queue 應(yīng)該分布在集群中各個(gè)節(jié)點(diǎn)序芦,而不是只在某各節(jié)點(diǎn)上,否則粤咪,該節(jié)點(diǎn)宕機(jī)會(huì)對(duì)訂閱該 topic 的應(yīng)用造成影響谚中。
3> 多 master 多 slave 異步復(fù)制模式
在多 master 模式的基礎(chǔ)上,每個(gè) master 節(jié)點(diǎn)都有至少一個(gè)對(duì)應(yīng)的 slave寥枝。master
節(jié)點(diǎn)可讀可寫宪塔,但是 slave 只能讀不能寫,類似于 mysql 的主備模式囊拜。
優(yōu)點(diǎn): 在 master 宕機(jī)時(shí)某筐,消費(fèi)者可以從 slave 讀取消息,消息的實(shí)時(shí)性不會(huì)受影響冠跷,性能幾乎和多 master 一樣南誊。
缺點(diǎn):使用異步復(fù)制的同步方式有可能會(huì)有消息丟失的問題。
4> 多 master 多 slave 同步雙寫模式
同多 master 多 slave 異步復(fù)制模式類似蜜托,區(qū)別在于 master 和 slave 之間的數(shù)據(jù)同步方式抄囚。
優(yōu)點(diǎn):同步雙寫的同步模式能保證數(shù)據(jù)不丟失橄务。
缺點(diǎn):發(fā)送單個(gè)消息 RT 會(huì)略長(zhǎng)幔托,性能相比異步復(fù)制低10%左右。
刷盤策略:同步刷盤和異步刷盤(指的是節(jié)點(diǎn)自身數(shù)據(jù)是同步還是異步存儲(chǔ))
同步方式:同步雙寫和異步復(fù)制(指的一組 master 和 slave 之間數(shù)據(jù)的同步)
注意:要保證數(shù)據(jù)可靠蜂挪,需采用同步刷盤和同步雙寫的方式重挑,但性能會(huì)較其他方式低。
5> summary
單Master無Slave(脆弱)
單Master多Slave(單點(diǎn)故障就癱棠涮,開源版無主備切換功能)
多Master無Slave(無單點(diǎn)故障谬哀,線上生產(chǎn)常用模式)
多Master多Slave(無單點(diǎn)故障)