RocketMQ系列(一):綜述

設(shè)計概念

基于topic的發(fā)布/訂閱

其核心功能包括:

  • 消息發(fā)送
  • 消息存儲
  • 消息消費(fèi)

設(shè)計目標(biāo)

  • 架構(gòu)模式
    與大部分消息中間件一樣讲冠,采用發(fā)布訂閱模式朽缴,基本參與組建:消息發(fā)送者,消息服務(wù)器(消息存儲)、消息消費(fèi)、路由發(fā)現(xiàn)聋亡。

  • 順序消息
    消息消費(fèi)者按照消息到達(dá)消息服務(wù)器的順序進(jìn)行消費(fèi)

  • 消息過濾
    消費(fèi)者可以對同一主題下按規(guī)則過濾
    1. 消息在broker端過濾。broker只將消費(fèi)者過濾的消息發(fā)送給消費(fèi)者际乘。(tag)
    2. 消息在消息端過濾坡倔。缺點(diǎn)是,很多無用的消息會從broker端傳輸?shù)较M(fèi)端脖含。

  • 消息存儲
    核心罪塔。對消息存儲一版有兩個維度的考量
    1. 消息堆積能力
    2. 消息存儲性能

  • 消息高可用
    通常影響消息可靠性的有以下幾種情況

    1. broker正常關(guān)機(jī)
    2. broker異常crash
    3. os crash
    4. 機(jī)器斷電,但能立即恢復(fù)供電
    5. 機(jī)器無法開機(jī)(cpu养葵、主板征堪、內(nèi)存等關(guān)鍵設(shè)備損壞)
    6. 磁盤損壞

    1-4:在同步刷盤機(jī)制下可以保證消息不丟失,在異步刷盤模式下关拒,會丟失少量请契。
    5-6:屬于單點(diǎn)故障,一旦發(fā)生夏醉,該節(jié)點(diǎn)上的消息全部丟失。如果開啟了異步復(fù)制功能涌韩,大部分不丟失畔柔,只丟失少量。在雙寫機(jī)制下臣樱,可以保證消息不丟失靶擦。


  • 消息到達(dá)(消息消費(fèi))低延遲

  • 確保消息必須被消費(fèi)一次
    通過消息消費(fèi)確認(rèn)ack機(jī)制來保證消息至少被消費(fèi)一次腮考。但由于ack有可能丟,所以會存在重復(fù)消費(fèi)的情況玄捕,這里就需要消費(fèi)者做冪等了踩蔚。

  • 回溯消息
    指消費(fèi)者已經(jīng)消費(fèi)成功的消息,由于業(yè)務(wù)要求需要重新消費(fèi)消息枚粘∠诿觯可以向前或向后。

  • 消息堆積
    消息中間件的主要功能是異步解耦馍迄。必須具備對前端的數(shù)據(jù)洪峰福也,提高后端系統(tǒng)的可用性,必然要求消息中間件具備一定的消息堆積能力攀圈。消息堆積能力依賴消息存儲暴凑。

  • 定時消息
    指消息發(fā)送到broker后,不能被消費(fèi)者立即消費(fèi)赘来,要到特定的時間點(diǎn)才能消費(fèi)现喳。
    如果要支持任意精度的定時消息消費(fèi),必須在消息服務(wù)端對消息進(jìn)行排序犬辰,勢必會帶來很大的性能損耗嗦篱,故rocketMq不支持任意進(jìn)度的定時消息,而只支持特定延遲級別忧风。

  • 消息重試機(jī)制
    消費(fèi)機(jī)場默色,消息重新投遞。

流程

啟動時:

  • nameServer 與 broker 建立長連接狮腿。把隊(duì)列路由信息維護(hù)到nameServer中腿宰。
  • nameServer 與 producer 簡歷長連接。producer獲取自己要的topic下的隊(duì)列路由信息缘厢。
  • nameServer 與 consumer 簡歷長連接吃度。根據(jù)group和topic,consumer找到自己對應(yīng)的queue贴硫。

發(fā)送消息的過程:

  • producer 發(fā)送消息給所有broker椿每。broker存到commitLog buffer中。
    這里有個策略英遭,是同步刷臟頁還是異步刷臟頁间护。如果保證消息不丟失,就使用同步刷臟頁策略挖诸,消息落到commitlog后返回producer消息發(fā)送成功汁尺。如果消息發(fā)送異常,根據(jù)重試次數(shù)重試多律,直到成功痴突。這里保證了發(fā)送端的發(fā)送一定成功搂蜓。

  • 消息存到了commitLog,會把消息分發(fā)到consumerQueue和index索引文件中辽装。
    分發(fā)到哪個隊(duì)列帮碰,也是有策略的:輪訓(xùn)、隨機(jī)拾积、key hash殉挽。因?yàn)槭锹淞舜疟P,所以消息存儲過程中殷勘,消息不會丟失此再。

  • consumer從對應(yīng)的queue中根據(jù)offset拉取消息,消費(fèi)成功后玲销,返回ack输拇。標(biāo)識消費(fèi)成功。如果消費(fèi)失敗贤斜,不返回ack策吠,則broker端的offset不會變化,等consumer的下一次拉取瘩绒。

順序消息

兩種方式:

  1. 隊(duì)列大小猴抹,只開1個,那個消息只在一個隊(duì)列中锁荔,肯定是順序的蟀给。
  2. producer在調(diào)用send的時候,使用key hash來找queue阳堕,把key設(shè)置成一個跋理,則會被分發(fā)到同一個queue中,在同一個queue中恬总,消息也是順序的前普。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壹堰,隨后出現(xiàn)的幾起案子拭卿,更是在濱河造成了極大的恐慌,老刑警劉巖贱纠,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峻厚,死亡現(xiàn)場離奇詭異,居然都是意外死亡谆焊,警方通過查閱死者的電腦和手機(jī)目木,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刽射,你說我怎么就攤上這事√曛矗” “怎么了誓禁?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肾档。 經(jīng)常有香客問我摹恰,道長,這世上最難降的妖魔是什么怒见? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任俗慈,我火速辦了婚禮,結(jié)果婚禮上遣耍,老公的妹妹穿的比我還像新娘闺阱。我一直安慰自己,他們只是感情好舵变,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布酣溃。 她就那樣靜靜地躺著,像睡著了一般纪隙。 火紅的嫁衣襯著肌膚如雪赊豌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天绵咱,我揣著相機(jī)與錄音碘饼,去河邊找鬼。 笑死悲伶,一個胖子當(dāng)著我的面吹牛艾恼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拢切,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蒂萎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淮椰?” 一聲冷哼從身側(cè)響起五慈,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎主穗,沒想到半個月后泻拦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忽媒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年争拐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晦雨。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡架曹,死狀恐怖隘冲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绑雄,我是刑警寧澤展辞,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站万牺,受9級特大地震影響罗珍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脚粟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一覆旱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧核无,春花似錦扣唱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至已慢,卻和暖如春曲聂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佑惠。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工朋腋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人膜楷。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓旭咽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赌厅。 傳聞我的和親對象是個殘疾皇子穷绵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348