RocketMq

Producer:消息生產(chǎn)者

Consumer:消息消費(fèi)者

nameServer:路由中心

broker:消息隊(duì)列實(shí)體

? -mater:主節(jié)點(diǎn)

? -slave:從節(jié)點(diǎn)

Namesrv

就是一個(gè)注冊(cè)中心迈窟,存儲(chǔ)當(dāng)前集群所有Brokers信息、Topic跟Broker的對(duì)應(yīng)關(guān)系瞬女。

Namesrv用于存儲(chǔ)Topic、Broker關(guān)系信息,功能簡(jiǎn)單,穩(wěn)定性高辆毡。多個(gè)Namesrv之間相互沒(méi)有通信,單臺(tái)Namesrv宕機(jī)不影響其他Namesrv與集群甜害;即使整個(gè)Namesrv集群宕機(jī)舶掖,已經(jīng)正常工作的Producer,Consumer尔店,Broker仍然能正常工作眨攘,但新起的Producer,Consumer,Broker就無(wú)法工作嚣州。

Namesrv壓力不會(huì)太大鲫售,平時(shí)主要開(kāi)銷是在維持心跳和提供Topic-Broker的關(guān)系數(shù)據(jù)。但有一點(diǎn)需要注意该肴,Broker向Namesr發(fā)心跳時(shí)情竹,會(huì)帶上當(dāng)前自己所負(fù)責(zé)的所有Topic信息,如果Topic個(gè)數(shù)太多(萬(wàn)級(jí)別)匀哄,會(huì)導(dǎo)致一次心跳中秦效,就Topic的數(shù)據(jù)就幾十M,網(wǎng)絡(luò)情況差的話涎嚼,網(wǎng)絡(luò)傳輸失敗阱州,心跳失敗,導(dǎo)致Namesrv誤認(rèn)為Broker心跳失敗法梯。

nameserver是rocketmq自己實(shí)現(xiàn)的配置服務(wù)器苔货,不是Zookeeper。

Broker

?集群最核心模塊,主要負(fù)責(zé)Topic消息存儲(chǔ)蒲赂、管理和分發(fā)等功能阱冶。

1,高并發(fā)讀寫(xiě)服務(wù)

Broker的高并發(fā)讀寫(xiě)主要是依靠以下兩點(diǎn):

消息順序?qū)懤淖欤蠺opic數(shù)據(jù)同時(shí)只會(huì)寫(xiě)一個(gè)文件木蹬,一個(gè)文件滿1G,再寫(xiě)新文件若皱,真正的順序?qū)懕P(pán)镊叁,使得發(fā)消息TPS大幅提高。

消息隨機(jī)讀走触,RocketMQ盡可能讓讀命中系統(tǒng)pagecache晦譬,因?yàn)椴僮飨到y(tǒng)訪問(wèn)pagecache時(shí),即使只訪問(wèn)1K的消息互广,系統(tǒng)也會(huì)提前預(yù)讀出更多的數(shù)據(jù)敛腌,在下次讀時(shí)就可能命中pagecache,減少I(mǎi)O操作惫皱。

2像樊,負(fù)載均衡與動(dòng)態(tài)伸縮

負(fù)載均衡:Broker上存Topic信息,Topic由多個(gè)隊(duì)列組成旅敷,隊(duì)列會(huì)平均分散在多個(gè)Broker上生棍,而Producer的發(fā)送機(jī)制保證消息盡量平均分布到所有隊(duì)列中,最終效果就是所有消息都平均落在每個(gè)Broker上媳谁。

動(dòng)態(tài)伸縮能力(非順序消息):Broker的伸縮性體現(xiàn)在兩個(gè)維度:Topic,Broker涂滴。


Topic維度:假如一個(gè)Topic的消息量特別大,但集群水位壓力還是很低晴音,就可以擴(kuò)大該Topic的隊(duì)列數(shù)柔纵,Topic的隊(duì)列數(shù)跟發(fā)送、消費(fèi)速度成正比段多。

Broker維度:如果集群水位很高了首量,需要擴(kuò)容,直接加機(jī)器部署B(yǎng)roker就可以进苍。Broker起來(lái)后向Namesrv注冊(cè)加缘,Producer、Consumer通過(guò)Namesrv發(fā)現(xiàn)新Broker觉啊,立即跟該Broker直連拣宏,收發(fā)消息。

3杠人,高可用&高可靠

高可用:集群部署時(shí)一般都為主備勋乾,備機(jī)實(shí)時(shí)從主機(jī)同步消息宋下,如果其中一個(gè)主機(jī)宕機(jī),備機(jī)提供消費(fèi)服務(wù)辑莫,但不提供寫(xiě)服務(wù)学歧。

高可靠:所有發(fā)往broker的消息,有同步刷盤(pán)和異步刷盤(pán)機(jī)制各吨;同步刷盤(pán)時(shí)枝笨,消息寫(xiě)入物理文件才會(huì)返回成功,異步刷盤(pán)時(shí)揭蜒,只有機(jī)器宕機(jī)横浑,才會(huì)產(chǎn)生消息丟失,broker掛掉可能會(huì)發(fā)生屉更,但是機(jī)器宕機(jī)崩潰是很少發(fā)生的徙融,除非突然斷電

4,Broker與Namesrv的心跳機(jī)制

單個(gè)Broker跟所有Namesrv保持心跳請(qǐng)求瑰谜,心跳間隔為30秒欺冀,心跳請(qǐng)求中包括當(dāng)前Broker所有的Topic信息。Namesrv會(huì)反查Broer的心跳信息萨脑,如果某個(gè)Broker在2分鐘之內(nèi)都沒(méi)有心跳脚猾,則認(rèn)為該Broker下線,調(diào)整Topic跟Broker的對(duì)應(yīng)關(guān)系砚哗。但此時(shí)Namesrv不會(huì)主動(dòng)通知Producer、Consumer有Broker宕機(jī)砰奕。

消費(fèi)者(Consumer)

消費(fèi)者啟動(dòng)時(shí)需要指定Namesrv地址蛛芥,與其中一個(gè)Namesrv建立長(zhǎng)連接。消費(fèi)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況军援,這意味著某個(gè)broker如果宕機(jī)仅淑,客戶端最多要30秒才能感知。連接建立后胸哥,從namesrv中獲取當(dāng)前消費(fèi)Topic所涉及的Broker涯竟,直連Broker。

Consumer跟Broker是長(zhǎng)連接空厌,會(huì)每隔30秒發(fā)心跳信息到Broker庐船。Broker端每10秒檢查一次當(dāng)前存活的Consumer,若發(fā)現(xiàn)某個(gè)Consumer 2分鐘內(nèi)沒(méi)有心跳嘲更,就斷開(kāi)與該Consumer的連接筐钟,并且向該消費(fèi)組的其他實(shí)例發(fā)送通知,觸發(fā)該消費(fèi)者集群的負(fù)載均衡赋朦。

消費(fèi)者端的負(fù)載均衡

先討論消費(fèi)者的消費(fèi)模式篓冲,消費(fèi)者有兩種模式消費(fèi):集群消費(fèi)李破,廣播消費(fèi)。

廣播消費(fèi):每個(gè)消費(fèi)者消費(fèi)Topic下的所有隊(duì)列壹将。

集群消費(fèi):一個(gè)topic可以由同一個(gè)ID下所有消費(fèi)者分擔(dān)消費(fèi)嗤攻。具體例子:假如TopicA有6個(gè)隊(duì)列,某個(gè)消費(fèi)者ID起了2個(gè)消費(fèi)者實(shí)例诽俯,那么每個(gè)消費(fèi)者負(fù)責(zé)消費(fèi)3個(gè)隊(duì)列妇菱。如果再增加一個(gè)消費(fèi)者ID相同消費(fèi)者實(shí)例,即當(dāng)前共有3個(gè)消費(fèi)者同時(shí)消費(fèi)6個(gè)隊(duì)列惊畏,那每個(gè)消費(fèi)者負(fù)責(zé)2個(gè)隊(duì)列的消費(fèi)恶耽。

消費(fèi)者端的負(fù)載均衡,就是集群消費(fèi)模式下颜启,同一個(gè)ID的所有消費(fèi)者實(shí)例平均消費(fèi)該Topic的所有隊(duì)列偷俭。

生產(chǎn)者(Producer)

Producer啟動(dòng)時(shí),也需要指定Namesrv的地址缰盏,從Namesrv集群中選一臺(tái)建立長(zhǎng)連接涌萤。如果該Namesrv宕機(jī),會(huì)自動(dòng)連其他Namesrv口猜。直到有可用的Namesrv為止负溪。

生產(chǎn)者每30秒從Namesrv獲取Topic跟Broker的映射關(guān)系,更新到本地內(nèi)存中济炎。再跟Topic涉及的所有Broker建立長(zhǎng)連接川抡,每隔30秒發(fā)一次心跳。在Broker端也會(huì)每10秒掃描一次當(dāng)前注冊(cè)的Producer须尚,如果發(fā)現(xiàn)某個(gè)Producer超過(guò)2分鐘都沒(méi)有發(fā)心跳崖堤,則斷開(kāi)連接。

生產(chǎn)者端的負(fù)載均衡

生產(chǎn)者發(fā)送時(shí)耐床,會(huì)自動(dòng)輪詢當(dāng)前所有可發(fā)送的broker密幔,一條消息發(fā)送成功,下次換另外一個(gè)broker發(fā)送撩轰,以達(dá)到消息平均落到所有的broker上胯甩。

這里需要注意一點(diǎn):假如某個(gè)Broker宕機(jī),意味生產(chǎn)者最長(zhǎng)需要30秒才能感知到堪嫂。在這期間會(huì)向宕機(jī)的Broker發(fā)送消息偎箫。當(dāng)一條消息發(fā)送到某個(gè)Broker失敗后,會(huì)往該broker自動(dòng)再重發(fā)2次溉苛,假如還是發(fā)送失敗镜廉,則拋出發(fā)送失敗異常。業(yè)務(wù)捕獲異常愚战,重新發(fā)送即可娇唯∑胱瘢客戶端里會(huì)自動(dòng)輪詢另外一個(gè)Broker重新發(fā)送,這個(gè)對(duì)于用戶是透明的塔插。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梗摇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子想许,更是在濱河造成了極大的恐慌伶授,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流纹,死亡現(xiàn)場(chǎng)離奇詭異糜烹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)漱凝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)疮蹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茸炒,你說(shuō)我怎么就攤上這事愕乎。” “怎么了壁公?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵感论,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我紊册,道長(zhǎng)比肄,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任囊陡,我火速辦了婚禮薪前,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘关斜。我一直安慰自己,他們只是感情好铺浇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布痢畜。 她就那樣靜靜地躺著,像睡著了一般鳍侣。 火紅的嫁衣襯著肌膚如雪丁稀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天倚聚,我揣著相機(jī)與錄音线衫,去河邊找鬼。 笑死惑折,一個(gè)胖子當(dāng)著我的面吹牛授账,可吹牛的內(nèi)容都是我干的枯跑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼白热,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼敛助!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起屋确,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纳击,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后攻臀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體焕数,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年刨啸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堡赔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呜投,死狀恐怖加匈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仑荐,我是刑警寧澤雕拼,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站粘招,受9級(jí)特大地震影響啥寇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洒扎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一辑甜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袍冷,春花似錦磷醋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至煌恢,卻和暖如春骇陈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰抵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工你雌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人二汛。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓婿崭,卻偏偏與公主長(zhǎng)得像拨拓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逛球,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容