RocketMq基礎認知

RocketMQ是一款分布式股缸、隊列模型的消息中間件衡楞,單機支持1萬以上的持久化隊列,前提是足夠的內存敦姻、硬盤空間瘾境。

消息隊列主要的應用場景:異步處理,應用解耦镰惦,流量削峰迷守,消息通訊。



如上圖所示旺入, RocketMQ的部署結構有以下特點:

Name Server是一個幾乎無狀態(tài)節(jié)點兑凿,可集群部署,節(jié)點之間無任何信息同步茵瘾。

Broker部署相對復雜礼华,Broker分為Master與Slave,一個Master可以對應多個Slave拗秘,但是一個Slave只能對應一個Master圣絮,Master與Slave的對應關系通過指定相同的BrokerName,不同的BrokerId來定義雕旨,BrokerId為0表示Master扮匠,非0表示Slave。Master也可以部署多個凡涩。每個Broker與NameServer集群中的所有節(jié)點建立長連接棒搜,定時注冊Topic信息到所有Name Server。

Producer與Name Server集群中的其中一個節(jié)點(隨機選擇)建立長連接活箕,定期從Name Server取Topic路由信息力麸,并向提供Topic服務的Master建立長連接,且定時向Master發(fā)送心跳讹蘑。Producer完全無狀態(tài)末盔,可集群部署。

Consumer與Name Server集群中的其中一個節(jié)點(隨機選擇)建立長連接座慰,定期從NameServer取Topic路由信息陨舱,并向提供Topic服務的Master、Slave建立長連接版仔,且定時向Master游盲、Slave發(fā)送心跳误墓。Consumer既可以從Master訂閱消息,也可以從Slave訂閱消息益缎,訂閱規(guī)則由Broker配置決定谜慌。

Producer:?

消息的生產者,負責發(fā)送消息莺奔,將消息推送給broker欣范。一般由業(yè)務系統(tǒng)負責產生消息。

消息有3種發(fā)送方式:同步令哟、異步恼琼、單向。?

Broker:

rocketmq的核心組件屏富,負責消息的接收晴竞、存儲(持久化到磁盤)、被消費者拉取消息等功能狠半。

broker也存儲消息相關的元數(shù)據(jù)噩死,包括:消費者組、消費進度神年、topic&queue信息等已维。

Consumer:

消息的消費者,從broker上拉取消息從而進行消費瘤袖。rocketmq提供兩種消費者衣摩。

一般是后臺系統(tǒng)負責異步消費消息。

主動消費者:DefaultMQPullConsumer捂敌,從broker中拉取一批消息并消費艾扮,主動權由消費者控制。

被動消費者:DefaultMQPushConsumer占婉,消費者實現(xiàn)回調接口泡嘴,一旦有消息,broker回調接口逆济,消費者被動響應酌予。

Name Server:

注冊中心的作用,提供輕量級的服務發(fā)現(xiàn)和提供路由信息(broker的服務注冊與發(fā)現(xiàn))奖慌。

nameserver存有全量的路由信息抛虫,提供對等的讀寫服務,支持快速擴縮容简僧。

nameserver接收broker的請求建椰,注冊broker的路由信息。

nameserver接收client(producer/consumer)的請求岛马,根據(jù)消息的topic獲取相應的broker路由信息棉姐。

(手動創(chuàng)建的topic可以指定broker屠列,自動創(chuàng)建的topic會隨機指定broker,也許指定單個或全部伞矩,topic的概念在后面笛洛。)

Topic:

一種消息的邏輯分類(消息的類型),比如說你有訂單類的消息乃坤,也有庫存類的消息苛让,那么就需要進行分類存儲。

生產者方面:發(fā)消息時需指定topic侥袜,可以有1-n個生產者發(fā)布1個topic的消息蝌诡,

也1個生產者可以發(fā)布不同topic的消息。消費者方面:收消息時需訂閱topic枫吧,

可以有1-n個消費者組訂閱1個topic的消息,1個消費者組可以訂閱不同topic的消息宇色。

1個消息必須指定1個topic九杂,topic允許自動創(chuàng)建與手工創(chuàng)建,topic創(chuàng)建時需要指定broker宣蠕,可以指定1個或多個例隆,

name server就是通過broker與topic的映射關系來做路由。

producer和consumer在生產和消費消息時抢蚀,都需要指定消息的 topic镀层,當topic匹配時,

consumer 才會消費到producer發(fā)送的消息皿曲。

topic與broker是多對多的關系唱逢,一個topic分布在多個broker上,一個broker可以配置多個topic屋休。

Message:

message是消息的載體坞古。每個message必須指定一個topic,相當于寄信的地址劫樟。

message還有一個可選的tag設置痪枫,以便消費端可以基于tag進行過濾消息。

message還有擴展的kv結構叠艳,例如你可以設置一個業(yè)務key到你的消息中奶陈,在broker上查找消息并診斷問題。

Tag:

標簽可以被認為是對topic的進一步細化附较。一般在相同業(yè)務模塊中通過引入標簽來標記不同用途的消息吃粒。

區(qū)分相同topic下不同種類的消息。

生產到哪個topic的哪個tag下翅睛,消費者也是從topic的哪個tag進行消費声搁,即實現(xiàn)消息的過濾黑竞。

Queue:

queue是消息的物理管理單位,而topic是邏輯管理單位疏旨。一個topic下可以有多個queue很魂,

默認自動創(chuàng)建是4個,手動創(chuàng)建是8個檐涝。

queue的引入使得消息存儲可以分布式集群化遏匆,具有了水平擴展的能力。

1個message只能屬于1個queue谁榜、1個topic幅聘。

在rocketmq中,所有消息隊列都是持久化窃植,長度無限的數(shù)據(jù)結構帝蒿,所謂長度無限是指隊列中的每個存儲單元都是定長,

訪問其中的存儲單元使用offset來訪問巷怜,offset 為 java long 類型葛超,64 位,理論上在 100年內不會溢出延塑,

所以認為是長度無限绣张,另外隊列中只保存最近幾天的數(shù)據(jù),之前的數(shù)據(jù)會按照過期時間來刪除关带。

也可以認為 Message Queue是一個長度無限的數(shù)組侥涵,offset就是下標。

rocketmq中宋雏,producer將消息發(fā)送給broker時芜飘,需要指定發(fā)送到哪一個queue中,默認情況下好芭,

producer會輪詢的將消息發(fā)送到每個queue中燃箭,順序是隨機的,但總體上每個queue的消息數(shù)量均分舍败,

所有broker下的queue合并成一個list去輪詢招狸,

也可以由程序員通過MessageQueueSelector接口來指定具體發(fā)送到哪個queue中。

對于consumer而言邻薯,會為每個consumer分配固定的隊列(如果隊列總數(shù)沒有發(fā)生變化)裙戏,

consumer從固定的隊列中去拉取沒有消費的消息進行處理。

消費端會通過RebalanceService線程厕诡,10秒鐘做一次基于topic下的所有隊列負載累榜,獲取同一個Consumer Group下的所有Consumer實例數(shù)或Topic的queue的個數(shù)是否改變,通知所有Consumer實例重新做一次負載均衡算法。

Offset:

理解成消費進度壹罚,可自增葛作。

Commit log:

雖然每個topic下面有很多message queue,但是message queue本身并不存儲消息猖凛。

真正的消息存儲會寫在CommitLog的文件赂蠢,message queue只是存儲CommitLog中對應的位置信息,

方便通過message queue找到對應存儲在CommitLog的消息辨泳。 不同的topic虱岂,

message queue都是寫到相同的CommitLog 文件,也就是說CommitLog完全的順序寫菠红。

調用關系:

服務啟動順序:name server->broker->producer&consumer

每個broker與name server集群中的所有節(jié)點建立長連接第岖,

定時注冊topic&broker的路由信息到所有name server中。

producer與name server集群中的其中一個節(jié)點(隨機選擇)建立長連接试溯,

定期從name server獲取topic路由信息蔑滓,并向提供topic服務的broker master建立長連接,

且定期向broker master發(fā)送心跳耍共,produce無狀態(tài)烫饼,可集群部署。

producer只能將消息發(fā)送到broker master试读,但是consumer則不一樣。

consumer與name server集群中的其中一個節(jié)點(隨機選擇)建立長連接荠耽,定期從name server獲取topic路由信息钩骇,

consumer同時與提供topic服務的master和slave建立長連接且定時發(fā)送心跳,

consumer既可以從broker master訂閱消息铝量,也可以從broker slave訂閱消息倘屹,訂閱規(guī)則由broker配置決定。

broker一旦需要橫向擴展慢叨,只需要啟動更多的broker即可纽匙,然后把對應的topic建上,

客戶端的queue集合即會變大拍谐,并且由于每個group下面的topic的配置都是獨立的烛缔,

也就說可以讓broker1下面的那個topic的queue數(shù)量是4,其他broker下的topic queue數(shù)量是2轩拨,

這樣broker1則得到更大的負載践瓷。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亡蓉,隨后出現(xiàn)的幾起案子晕翠,更是在濱河造成了極大的恐慌,老刑警劉巖砍濒,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淋肾,死亡現(xiàn)場離奇詭異硫麻,居然都是意外死亡,警方通過查閱死者的電腦和手機樊卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門拿愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人简识,你說我怎么就攤上這事赶掖。” “怎么了七扰?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵奢赂,是天一觀的道長。 經(jīng)常有香客問我颈走,道長膳灶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任立由,我火速辦了婚禮轧钓,結果婚禮上,老公的妹妹穿的比我還像新娘锐膜。我一直安慰自己毕箍,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布道盏。 她就那樣靜靜地躺著而柑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荷逞。 梳的紋絲不亂的頭發(fā)上媒咳,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音种远,去河邊找鬼涩澡。 笑死,一個胖子當著我的面吹牛坠敷,可吹牛的內容都是我干的妙同。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼常拓,長吁一口氣:“原來是場噩夢啊……” “哼渐溶!你這毒婦竟也來了?” 一聲冷哼從身側響起弄抬,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茎辐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拖陆,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡弛槐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了依啰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乎串。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖速警,靈堂內的尸體忽然破棺而出叹誉,到底是詐尸還是另有隱情,我是刑警寧澤闷旧,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布长豁,位于F島的核電站,受9級特大地震影響忙灼,放射性物質發(fā)生泄漏匠襟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一该园、第九天 我趴在偏房一處隱蔽的房頂上張望酸舍。 院中可真熱鬧,春花似錦里初、人聲如沸啃勉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璧亮。三九已至,卻和暖如春斥难,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帘饶。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工哑诊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人及刻。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓镀裤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缴饭。 傳聞我的和親對象是個殘疾皇子暑劝,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容