RocketMQ原理解析

RocketMQ原理解析


RocketMQ部署集群.jpg

說明:

1.NameServer名稱服務(wù)

NameServer是沒有狀態(tài)的,即NameServer中的Broker和topic等狀態(tài)信息(通過其他角色上報獲炔绷ァ)都是保存在內(nèi)存中的吗购,不會持久化存儲(可通過配置實現(xiàn))宏蛉,集群可以橫向擴展。主要功能如下:
a.接收Broker(master和slave)啟動時的注冊路由信息;
b.為producer和consumer提供路由服務(wù),即通過topic名字獲取所有broker的路由信息东帅;
c.接收broker發(fā)送的心跳信息掠哥,如果心跳的時間戳過期NameServer關(guān)閉與broker的連接巩踏。

2.Broker

Broker向NameServer注冊topic配置信息,配置信息格式如下:

{
               "perm":6,
               "readQueueNums":2,
               "topicFilterType":"SINGLE_TAG",
               "topicName":"Topic-Lance",
                "writeQueueNums":5

}

Broker的消息存儲
Rocketmq的消息的存儲是由consumeQueue和 commitLog 配合完成的续搀,commitLog保存消息的物理數(shù)據(jù)塞琼,consumeQueue是消息的邏輯隊列,類似于索引禁舷,存儲的是指向物理存儲的地址彪杉。在一個Broker上,只有一個commitLog牵咙,所有consumeQueue共享同一個commitLog派近。

假如topic的名字是Topic-Lance,配置的讀寫隊列有queue-1和queue-2洁桌,那么Topic-Lance和queue-1組成一個consumeQueue渴丸,Topic-Lance和queue-2組成另一個consumeQueue。

假如broker-A(包含queue-0,queue-1,queue-2), broker-B(包含queue-0,queue-1)兩臺broker機器都配置了Topic-Lance另凌,那么broker啟動的時候谱轨,注冊到NameServer的Topic-Lance的路由有broker-A-queue-0,broker-A-queue-1途茫,broker-A-queue-2碟嘴,broker-B-queue-0,broker-B-queue-1共5個consumeQueue囊卜。

為了提高讀寫性能娜扇,commitLog采取順序?qū)懀S機讀(通過pagecache機制批量從磁盤讀取到內(nèi)存栅组,加速后續(xù)的讀取速度)雀瓢,consumeQueue大部分讀入內(nèi)存(如果consumeQueue因為重啟等因素丟失,可以通過commitLog重建)

3.Producer 生產(chǎn)者

a.Producer發(fā)送消息時(必須制定topic),首先從本地的Producer集合中獲取topic->broker的路由信息玉掸,如果沒有刃麸,則從nameserver中獲取topic->broker路由,并緩存到本地集合司浪;
b.定時從nameServer獲取最新的topic路由信息泊业;
c.Producer定時將Producer的group信息發(fā)送到對應(yīng)的broker上把沼;
d.Producer發(fā)送消息到Master的broker上,通過Broker的主從復制copy到slave的broker上吁伺。

發(fā)送實現(xiàn)輪詢方式:

List<MessageQueue> messageQueueList;

AtomicInteger sendWhichQueue;

int index =(++sendWitchQueue)% messageQueueList.size

MessageQueue sendQueue = messageQueueList[index];
//sendQueue 為要發(fā)送的隊列

4.Consumer 消費者

a.向NameServer注冊Consumer饮睬;
b.定時從NameServer獲取topic路由信息;
c.定時清理下線的broker;
d.向所有broker發(fā)送心跳篮奄;
e.動態(tài)調(diào)整消費線程池;
f.負責負載均衡服務(wù)RebalanceService捆愁。

RocketMQ是基于pull模式拉取消息,consumer做負載均衡并通過長輪詢向broker拉消息窟却,長輪詢拉取消息后回調(diào)MessageListener接口實現(xiàn)完成消費昼丑。

關(guān)于RocketMQ長輪詢可參考:http://www.reibang.com/p/48dbc9eee890

5.數(shù)據(jù)丟失問題處理

RocketMQ默認保存3天,commit log刷盤間隔夸赫,默認1秒

......

6.消費重試機制

Producer端重試 :

默認情況下是失敗3次重試菩帝,可通過retryTimesWhenSendFailed定義重試次數(shù);

Consumer端重試:

1.Exception的情況憔足,一般重復16次 10s胁附、30s、1mins滓彰、2mins控妻、3mins等,可以通過設(shè)置transactionCheckMax設(shè)置揭绑;
2.超時情況(Consumer端沒有返回CONSUME_SUCCESS弓候,也沒有返回RECONSUME_LATER),MQ會無限制的發(fā)送給Consumer端他匪,默認超時時間時15分鐘菇存。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邦蜜,隨后出現(xiàn)的幾起案子依鸥,更是在濱河造成了極大的恐慌,老刑警劉巖悼沈,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱迟,死亡現(xiàn)場離奇詭異,居然都是意外死亡絮供,警方通過查閱死者的電腦和手機衣吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壤靶,“玉大人缚俏,你說我怎么就攤上這事。” “怎么了忧换?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵恬惯,是天一觀的道長。 經(jīng)常有香客問我包雀,道長宿崭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任才写,我火速辦了婚禮,結(jié)果婚禮上奖蔓,老公的妹妹穿的比我還像新娘赞草。我一直安慰自己,他們只是感情好吆鹤,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布厨疙。 她就那樣靜靜地躺著,像睡著了一般疑务。 火紅的嫁衣襯著肌膚如雪沾凄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天知允,我揣著相機與錄音撒蟀,去河邊找鬼。 笑死温鸽,一個胖子當著我的面吹牛保屯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涤垫,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼姑尺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝠猬?” 一聲冷哼從身側(cè)響起切蟋,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榆芦,沒想到半個月后柄粹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡歧杏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年镰惦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犬绒。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡旺入,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茵瘾,我是刑警寧澤礼华,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拗秘,受9級特大地震影響圣絮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雕旨,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一扮匠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凡涩,春花似錦棒搜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至育韩,卻和暖如春克蚂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筋讨。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工埃叭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人版仔。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓游盲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛮粮。 傳聞我的和親對象是個殘疾皇子益缎,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345