rocket源碼解析

客戶端管理Channel

因為客戶端要主動發(fā)起請求免都,以consumer為例绽诚,在對topic進行消費時件甥,不同的topic可能在不同的broker上藏研,因此consumer端需要對連接的多個server的Channel進行管理

流程如下:consumer和nameserver通信,獲取broker地址咐汞,根據(jù)地址查詢是否存在Channel盖呼,若不存在就創(chuàng)建Channel,并在本地緩存化撕,下次通信時從緩存中獲取Channel几晤。通過Channel和broker進行通信。

關于自動創(chuàng)建topic的邏輯

發(fā)送消息時植阴,如果是新的topic锌仅,producer會先使用默認的topicKey(TBW102)去nameserver請求一個默認的TopicRoute章钾,這個topicRoute會包含broker等信息墙贱,然后根據(jù)這個topicRoute再構建一個新的topic對應的TopicPublishInfo热芹,將這個TopicPublishInfo放入producerImpl的緩存即topicPublishInfoTable中。這樣做是為了后期發(fā)送消息的統(tǒng)一性(發(fā)送消息需要按照topic和broker的對應關系來做)惨撇,這樣在發(fā)送消息時就直接選擇一個broker進行發(fā)送即可伊脓,broker端對于不存在的topic再進行創(chuàng)建。

nameserver返回的TopicRouteInfo中存有topic對應的所有broker的信息魁衙,以及broker中所有的master和slave报腔,客戶端會將其轉化為自己使用的,例如producer會將其轉換為TopicPublishInfo剖淀。

發(fā)送消息時根據(jù)brokerName找到brokerAddress

rocket集群相關

客戶端做負載均衡纯蛾,會在客戶端選擇broker進行通信,是在客戶端將消息發(fā)送到broker纵隔,因此相當于在客戶端將topic進行了分片處理翻诉,高可用場景下可以使用異步復制或者同步雙寫保證數(shù)據(jù)一致性

目前高可用模式是多master多slave,一個master對應一個slave捌刮,master負責讀寫碰煌,slave可以幫助讀。在master掛掉后slave并不能升級成為master绅作,但是可以繼續(xù)從slave讀芦圾。后期寫時只會寫到其他的master。

不同的master broker的brokerName不同俄认,master和對應slave的brokerName相同个少,brokerId不同,brokerId為0為master眯杏,brokerId不為0的為slave夜焦。

一個master可以對應多個slave,但是只有brokerId為1的才參與讀消息役拴,別的slave還是可以幫忙存儲消息的糊探。。河闰。

參考文檔中這段話

注意:當前RocketMQ版本在部署架構上支持一Master多Slave科平,但只有BrokerId=1的從服務器才會參與消息的讀負載。

高可用實現(xiàn)

master和slave兩種同步模式

同步雙寫

異步復制

如果當前broker為slave姜性,在將自己注冊到nameserver時瞪慧,若nameserver的注冊列表中存在對應的master,將會返回master的信息部念,包括master的地址和ha地址弃酌。ha地址就是master配置的brokerIP2氨菇。隨后slave會啟動一個線程(是在HAService中的HAClient),不停的將當前broker的消息位置的最大物理偏移量發(fā)送給master妓湘,master接收后會返回這個位置之后的消息查蓉,slave接收后寫入commitlog,達到異步復制的功能榜贴。

ConsumerGroup相關邏輯

如果兩個consumer的group相同豌研,在cluster模式下,會平均的消費消息唬党。

如果兩個consumer的group不同鹃共,一條消息會在兩個consumer處各消費一次。

Consumer端負載均衡的核心設計理念:一個消息消費隊列在同一時間只允許被同一消費組內(nèi)的一個消費者消費驶拱,一個消息消費者能同時消費多個消息隊列霜浴。

consumer端負載均衡的邏輯在RebalanceService。

cluster模式下

從broker獲取同一個group下的consumer列表蓝纲,按照平均分配的分頁算法伦腐,找到當前consumer對應的MessageQueue列表读处,將該MessageQueue列表和當前的processQueueTable做比對,將不在processQueueTable中的MessageQueue構造PullRequest,發(fā)送給PullService钧舌。

此處的分頁算法挟伙,是先將consumer和MessqgeQueueList排序办铡,用consumer作為頁碼钥飞,將MessageQueueList分為記錄,根據(jù)頁碼劃分記錄露懒,并求出每一頁的size和每一頁的范圍range闯冷。最后根據(jù)consumerId找到對應的MessageQueue。

消息存儲

幾個重要的類

  • CommitLog
  • MappedFile
  • MappedFileQueue

主要用到的jdk中的類

  • RandomAccessFile
  • MappedByteBuffer
  • FileChannel
    主要用到的技術懈词,內(nèi)存映射
    消息落盤之后蛇耀,ReputMessageService線程會更新ConsumeQueue和Index文件。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坎弯,一起剝皮案震驚了整個濱河市纺涤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抠忘,老刑警劉巖撩炊,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崎脉,居然都是意外死亡拧咳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門囚灼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骆膝,“玉大人祭衩,你說我怎么就攤上這事≡那” “怎么了掐暮?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愉择。 經(jīng)常有香客問我劫乱,道長,這世上最難降的妖魔是什么锥涕? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮狭吼,結果婚禮上层坠,老公的妹妹穿的比我還像新娘。我一直安慰自己刁笙,他們只是感情好破花,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疲吸,像睡著了一般座每。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摘悴,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天峭梳,我揣著相機與錄音,去河邊找鬼蹂喻。 笑死葱椭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的口四。 我是一名探鬼主播孵运,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔓彩!你這毒婦竟也來了治笨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赤嚼,失蹤者是張志新(化名)和其女友劉穎旷赖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體探膊,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡杠愧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了逞壁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片流济。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锐锣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绳瘟,到底是詐尸還是另有隱情雕憔,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布糖声,位于F島的核電站斤彼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蘸泻。R本人自食惡果不足惜琉苇,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悦施。 院中可真熱鬧并扇,春花似錦、人聲如沸抡诞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昼汗。三九已至肴熏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷窒,已是汗流浹背蛙吏。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹋肮,地道東北人出刷。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像坯辩,于是被迫代替她去往敵國和親馁龟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354