国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全面簡析RocketMQ 架構

馬哥Linux運維 ? 來源:JAVA高級架構 ? 作者:RyanLee86799 ? 2021-06-12 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Apache RocketMQ 是阿里開源的一款高性能、高吞吐量的分布式消息中間件。

整體架構

RocketMQ主要由 Producer、Broker、Consumer 三部分組成,其中Producer 負責生產消息,Consumer 負責消費消息,Broker 負責存儲消息。每個 Broker 可以存儲多個Topic的消息,每個Topic的消息也可以分片存儲于集群中的不同的Broker Group。

Namesrv

說道Namesrv首先會想到服務注冊與發現。分布式服務SOA架構體系中會有服務注冊與發現中心。主要作用是指導服務調用方找到服務提供者提供的服務實例。RocketMQ體系中Namesrv主要作用是:為producer和consumer提供關于topic的路由信息。管理broker節點:監控更新broker的實時狀態。路由注冊、路由刪除(故障剔除)。

Namesrv充當路由消息的提供者。Namesrv是一個幾乎無狀態節點,多個Namesrv實例組成集群,但相互獨立,沒有信息交換。

路由元信息

topicQueueTable:topic 消息隊列路由信息。

brokerAddrTable:broker基礎信息。包含broker name,所屬集群名稱,主broker地址等。

clusterAddrTable:broker集群信息,存儲集群中所有broker的名稱。

brokerLiveTable:broker狀態信息。

filterServerTable:broker上的filterServer列表。filterServer用于消息過濾。

路由注冊 RocketMQ路由注冊是通過broker與Namesrv的心跳功能實現的。broker啟動時向集群中所有Namesrv發送心跳包,之后每隔30秒向集群中所有Namesrv發送心跳包。心跳包中包含:broker集群信息、broker信息、topic配置信息、broker關聯的FilterServer列表等。如果brokerA為Master。并且brokerA上的topic1的配置信息發生變化或初次注冊,Namesrv會根據報文創建或更新Topic路由元數據,填充topicQueueTable。

路由刪除 Namesrv收到brokerA的心跳包會更新brokerLiveTable中的brokerA對應的BrokerLiveInfo中的lastUpdateTimestamp。Namesrv每隔10秒掃描brokerLiveTable一次。如果brokerA對應的BrokerLiveInfo 中 lastUpdateTimestamp距當前時間超過 120秒,Namesrv認為brokerA失效,會將brokerA的路由信息移除并關閉與broker的socket連接。更新:topicQueueInfo、brokerAddrTable、brokerLiveTable、filterServerTable等。

路由發現 RocketMQ路由發現是非實時的。當Topic路由信息發生變化是,Namesrv不會主動推送給客戶端(Producer、Consumer)。而是由客戶端定時到Namesrv拉去最新的路由信息并緩存(包含Topic路由信息)。

與kafka對比

kafka 由zookeeper集群提供命名服務(Naming Service)。

Kafka通過 ZooKeeper 管理集群配置、選舉 Leader 以及在 consumer g

Broker

消息中轉角色,負責存儲消息、轉發消息。代理服務器在RocketMQ系統中負責接收從生產者發送來的消息并存儲、同時為消費者的拉取請求作準備。代理服務器也存儲消息相關的元數據,包括消費者組、消費進度偏移和主題和隊列消息等。

Broker是以group為單位提供服務。一個group里面分Master和Slave。Master和Slave存儲的數據一樣,slave從master同步數據(同步雙寫或異步復制看配置)。一個Master可以對應多個Slave,一個Slave只能對應一個Master。Master與Slave的對應關系通過指定相同的BrokerName、不同的BrokerId來定義,BrokerId為0表示Master,非0表示Slave。Master也可以部署多個。每個Broker與Namesrv集群中的所有節點建立長連接,定時發送心跳包到所有Namesrv,更新broker信息、topic路由信息等。一個Topic的不同queue(分區)可分布到集群中不同的broker group上。

與kafka對比:

kafka和RocketMQ的broker都可以容納多個一個或多個分區數據(kafka分區:partition;RocketMQ分區:queue)。

kafka基于partition(分區) 做備份/高可用(partition follower)。

RocketMQ增加了broker group的概念,基于broker(可能包含多個分區)。

Producer

(消息)生產者。Producer與Namesrv集群中的其中一個節點(隨機選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務的broker master建立長連接,且定時向broker master發送心跳。Producer完全無狀態,可集群部署。

Producer負責生產消息,一般由業務系統負責生產消息。一個消息生產者會把業務應用系統里產生的消息發送到broker服務器。RocketMQ提供多種發送方式,同步發送、異步發送、順序發送、單向發送。同步和異步方式均需要Broker返回確認信息,單向發送不需要。

Consumer

(消息)消費者 Consumer與Namesrv集群中的其中一個節點(隨機選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務的Master、Slave建立長連接,且定時向Master、Slave發送心跳。Consumer既可以從Master訂閱消息,也可以從Slave訂閱消息,訂閱規則由Broker配置決定。

Consumer負責消費消息,一般是后臺系統負責異步消費。一個消息消費者會從Broker服務器拉取消息、并將其提供給應用程序。從用戶應用的角度而言提供了兩種消費形式:拉取式消費、推動式消費。

集群模式下:相同Consumer Group的每個Consumer實例平均分攤消息。一個條消息僅能被一個Consumer Group消費一次。

Producer、Consumer都只需要和集群中一個Namesrv建立長連接。Broker需要向集群中所有的Namesrv發送心跳包。 其實很好理解: Namesrv集群提供高可用的命名服務。 Producer、Consumer只需要從其中一臺定期同步路由信息。 如果Broker只隨機調一臺發送心跳包。那么不同的Namesrv保存的路由信息會出現

消費者類型:

拉取式消費(Pull Consumer) Consumer消費的一種類型,應用通常主動調用Consumer的拉消息方法從Broker服務器拉消息、主動權由應用控制。一旦獲取了批量消息,應用就會啟動消費過程。Pull方式里,取消息的過程需要用戶自己寫(包括提交offset等操作)。

推動式消費(Push Consumer) Consumer消費的一種類型,該模式下Broker收到數據后會主動推送給消費端,該消費模式一般實時性較高。Push Consumer原理上也是采取pull模式。實際上就是長輪詢的pull模式。

一些概念

主題(Topic) 表示一類消息的集合,每個主題包含若干條消息,每條消息只能屬于一個主題,是RocketMQ進行消息訂閱的基本單位。每個topic可分為若干個分區(queue)。

生產者組(Producer Group) 同一類Producer的集合,這類Producer發送同一類消息且發送邏輯一致。如果發送的是事務消息且原始生產者在發送之后崩潰,則Broker服務器會聯系同一生產者組的其他生產者實例以提交或回溯消費。

消費者組(Consumer Group) 同一類Consumer的集合,這類Consumer通常消費同一類消息且消費邏輯一致。消費者組使得在消息消費方面,實現負載均衡和容錯的目標變得非常容易。要注意的是,消費者組的消費者實例必須訂閱完全相同的Topic。RocketMQ 支持兩種消息模式:集群消費(Clustering)和廣播消費(Broadcasting)。

普通順序消息(Normal Ordered Message) 普通順序消費模式下,消費者通過同一個消費隊列收到的消息是有順序的,不同消息隊列收到的消息則可能是無順序的。

嚴格順序消息(Strictly Ordered Message) 嚴格順序消息模式下,消費者收到的所有消息均是有順序的。

消息(Message) 消息系統所傳輸信息的物理載體,生產和消費數據的最小單位,每條消息必須屬于一個主題。RocketMQ中每個消息擁有唯一的Message ID,且可以攜帶具有業務標識的Key。系統提供了通過Message ID和Key查詢消息的功能。

標簽(Tag) 為消息設置的標志,用于同一主題下區分不同類型的消息。來自同一業務單元的消息,可以根據不同業務目的在同一主題下設置不同標簽。標簽能夠有效地保持代碼的清晰度和連貫性,并優化RocketMQ提供的查詢系統。消費者可以根據Tag實現對不同子主題的不同消費邏輯,實現更好的擴展性。

關于消息中間件

消息中間件需要解決的問題:異步化、削峰填谷。

消息中間件應具備的基礎能力是:消息發布、訂閱、消費。概念相對簡單這里不過多描述。

消息中間件的一些重要的機制:

1. 消息優先級(Message Priority;RocketMQ不支持)

優先級是指在一個消息隊列中,每條消息都有不同的優先級,一般用整數來描述,優先級高的消息先投遞,如果消息完全在一個內存隊列中,那么在投遞前可以按照優先級排序,令優先級高的先投遞。由于RocketMQ所有消息都是持久化的,所以如果按照優先級來排序,開銷會非常大,因此RocketMQ沒有特意支持消息優先級,但是可以通過變通的方式實現類似功能,即單獨配置一個優先級高的隊列,和一個普通優先級的隊列,將不同優先級發送到不同隊列即可。

2. 順序消息(Message Order)

消息有序指的是一類消息消費時,能按照發送的順序來消費。例如:一個訂單產生了3條消息,分別是訂單創建,訂單付款,訂單完成。消費時,要按照這個順序消費才能有意義。但是同時訂單之間是可以并行消費的。RocketMQ可以嚴格的保證消息有序。

投遞消息的順序性:投遞消息的順序性可通過將一組消息投遞到同一分區實現。例如:借助MessageQueueSelector將對相同訂單的操作消息投放到同一分區。

消費消息的順序性:RoctetMQ特性保障:特定分區(queue)中的消息不能同時被同一個消費者組中的多個Consumer消費,以避免重復消費。通過自定義或使用預置的AllocateQueueStrategy可設定分區的分配策略(哪些分區分配給哪個消費者消費)。

3. 高可用、消息可靠性

3.1 消息持久化

RocketMQ、Kafka 以文件記錄形式持久化。

RocketMQ采用了單一的日志文件,即把同1個broker上面所有topic的所有queue的消息,存放在一個文件里面,從而避免了隨機的磁盤寫入。

如上圖所示,所有消息都存在一個單一的CommitLog文件里面,然后有后臺線程異步的同步到ConsumeQueue,再由Consumer進行消費。

TODO 同步、異步刷盤。

TODO RocketMQ充分利用Linux文件系統內存cache來提高性能。TODO CommitLog index Commitlog segment的大小與頁緩存一致。

RocketMQ消息存儲機制會在后面的文章詳細說明。

3.2 broker master/salve

TODO broker group master/salveTODO Async/Sync Master;

4. 高并發、可擴展 ==》 分布式

提高并發效率 =》 提高生產、消費并行度=》提高分區數量。

RocketMQ、kafka都支持topic數據分區存放、動態擴展。

以RocketMQ為例:

topic創建的時候可以用集群模式去創建(這樣集群里面每個broker的queue的數量相同),也可以用單個broker模式去創建(這樣每個broker的queue數量可以不一致)。

4.1 生產并行度

RocketMQ的生產并行度是由其自身機制及broker的數量決定的。這塊后面的文章會詳細分析。

4.2 消費并行度

廣播模式下所有消費者會接受并消費當前topic下所有Queue的消息。

集群模式下,一個queue只分配給一個consumer實例:這是由于拉取消息是consumer主動控制的,如果多個實例同時消費一個queue的消息,會導致同一個消息在不同的實例下被消費多次,所以算法上都是一個queue只分給一個consumer實例,一個consumer實例可以允許同時分到不同的queue。

Kafka的消費并行度依賴Topic配置的分區數,如分區數為10,那么最多10臺機器來并行消費(每臺機器只能開啟一個線程),或者一臺機器消費(10個線程并行消費)。即消費并行度和分區數一致。RocketMQ消費并行度分兩種情況:順序消費方式并行度同卡夫卡完全一致;亂序方式并行度取決于Consumer的線程數,如Topic配置10個隊列,10臺機器消費,每臺機器100個線程,那么并行度為1000。

4.3 消息隊列分配策略

Producer使用MessageQueueSelector選擇將消息投放到哪個分區 使用AllocateMessageQueueStrategy將不同分區分配給Consumer Group中的不同Consumer。一個分區(queue)僅允許分配給同一個Consumer Group下的一個Consumer(防止重復消費)。

MessageQueueSelector

內置實現類:SelectMessageQueueByMachineRoom SelectMessageQueueByHash SelectMessageQueueByRandom

可以通過實現MessageQueueSelector接口,來自定義Producer投遞消息時選擇分區的算法。

AllocateMessageQueueStrategy

內置實現類:

AllocateMessageQueueAveragely:平均分配算法 AllocateMessageQueueAveragelyByCircle:基于環形平均分配算法AllocateMachineRoomNearby:基于機房臨近原則算法AllocateMessageQueueByMachineRoom:基于機房分配算法AllocateMessageQueueConsistentHash:基于一致性hash算法AllocateMessageQueueByConfig:基于配置分配算法

可以通過實現AllocateMessageQueueStrategy來自定義queue 分配給特定Consumer Group下不同Consumer的策略。

參考:

https://github.com/apache/rocketmq/blob/master/docs/cn/https://juejin.im/post/6844903589819875336https://jaskey.github.io/blog/2016/12/19/rocketmq-rebalance/http://objcoding.com/2019/09/13/kafka-partition-and-rmq-queue/http://www.itmuch.com/books/rocketmq

作者:RyanLee86799

來源:https://juejin.im/post/6844904130822029320

文章轉載:JAVA高級架構

(版權歸原作者所有,侵刪)

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    14

    文章

    10251

    瀏覽量

    91480
  • 開源
    +關注

    關注

    3

    文章

    4203

    瀏覽量

    46128
  • kafka
    +關注

    關注

    0

    文章

    55

    瀏覽量

    5569

原文標題:RocketMQ 架構簡析

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    儀科技通過國家高新技術企業認證

    在剛過去且充滿挑戰的一年,我們不僅榮獲了“國家高新技術企業”認證,還迎來了儀科技官方微信公眾號粉絲數破萬的里程碑!
    的頭像 發表于 01-23 13:25 ?502次閱讀

    云平臺遠程抄表系統

    眾所周知,云平臺遠程抄表系統早已不是新鮮事物,而是工業能源數字化管控的“核心基建”,靠精準采集、智能分析的硬實力,成為企業能耗管控的剛需配置。下面我們來了解一下這套系統的總體架構以及優勢。 一、系統
    的頭像 發表于 01-22 10:05 ?180次閱讀
    云平臺遠程抄表系統<b class='flag-5'>簡</b><b class='flag-5'>析</b>

    工程師之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存儲架構深度對比

    引言 消息隊列的存儲架構是決定其可靠性、吞吐量、延遲性能的核心因素,直接影響業務場景適配能力。本文聚焦三款主流消息隊列 ——Kafka(LinkedIn 開源,側重高吞吐)、RocketMQ(阿里
    的頭像 發表于 01-13 16:19 ?181次閱讀
    工程師之夜系列分享第三十九篇:Kafka、<b class='flag-5'>RocketMQ</b>、JMQ 存儲<b class='flag-5'>架構</b>深度對比

    AR1105模組如何以極架構實現精準六向音源定位

    AR1105模組的設計思路始終圍繞"精準、極、易用"三大核心。在智能設備小型化、低成本化的發展趨勢下,傳統多麥定位方案的體積與成本劣勢日益凸顯,而AR1105憑借3麥實現六向
    的頭像 發表于 12-25 16:57 ?505次閱讀
    AR1105模組如何以極<b class='flag-5'>簡</b><b class='flag-5'>架構</b>實現精準六向音源定位

    AMD UltraScale架構:高性能FPGA與SoC的技術剖析

    的性能,成為了眾多工程師的首選。本文將深入剖析UltraScale架構的各個方面,為電子工程師們提供全面的技術參考。 文件下載: AMD ,Xilinx Artix? UltraScale+
    的頭像 發表于 12-15 14:35 ?555次閱讀

    芯源MCU架構是不是基本都是ARM架構?還有其他的架構嗎?

    芯源MCU架構是不是基本都是ARM架構?還有其他的架構嗎?
    發表于 11-20 06:21

    8款SOC方案全面支持大升降壓大功率快充移動電源方案

    領域推出了一系列高性能的芯片解決方案,為用戶帶來更便捷、高效的充電體驗。 這些方案具備極的外圍電路和軟件邏輯設計,可有效降低開發和實施的復雜性與成本,同時具備高度靈活性,可根據實際需求進行定制化調整。簡潔的架構不僅提升了產品的適應性,也使得認證過程更加便捷,可加速產品推
    發表于 09-22 15:08

    云平臺智慧供熱系統

    云平臺智慧供熱系統,是一款專為熱網運行管理設計的智能化平臺。系統深度融合物聯網、大數據分析與現代信息技術,實現對供熱過程的精準監測與智能調控,不僅顯著提升能源利用效率,更保障供熱系統穩定運行,讓溫暖高效送達千家萬戶,以數字之力,重塑城市溫暖新體驗。 實時數據監測:云平臺智慧供熱系統能夠實時監測供熱系統的溫度、壓力、流量等關鍵參數,包括實時數據查看、智能統計報表、換熱站數據監控、熱網調度調控等,確保供熱
    的頭像 發表于 08-26 15:29 ?674次閱讀
    <b class='flag-5'>簡</b><b class='flag-5'>析</b>云平臺智慧供熱系統

    多次運行AIBase中的構函數出現意外掉線的情況,怎么解決?

    第一次運行無異常,但是第二次運行這里會意外掉線,try+catch同樣無法捕捉,大家如何構yolo的? 目前解決辦法就是注釋掉這段代碼,不釋放是否會出現問題,雖然暫時沒發現異常
    發表于 08-14 07:10

    宏集分享 | 集中式架構還是分布式架構?SCADA架構選型的新趨勢

    成為每家企業在部署SCADA系統時必須面對的重要抉擇。本篇文章將帶你全面了解不同SCADA架構的優勢與局限,以及像宏集CODRA這樣的行業先行者如何通過“Edget
    的頭像 發表于 08-08 18:15 ?661次閱讀
    宏集分享 | 集中式<b class='flag-5'>架構</b>還是分布式<b class='flag-5'>架構</b>?SCADA<b class='flag-5'>架構</b>選型的新趨勢

    Modbus和MQTT協議

    Modbus和MQTT協議在設計目標、通信模式、應用場景、網絡結構、數據傳輸效率、設備兼容性及安全性等方面存在顯著差異,具體分析如下: 一、設計目標與定位 Modbus :誕生于1979年,由施耐德公司開發,最初為串行通信(RS232/RS485)設計。其目標是解決工業設備(如PLC、傳感器、儀表)之間的短距離、點對點或小范圍組網通信,核心是設備間直接的數據讀寫控制。Modbus屬于工業現場總線協議,側重底層設備的高效數據交互。 MQTT :2013年由OASIS標準化,最初
    的頭像 發表于 07-10 14:25 ?773次閱讀

    Modbus與MQTT的區別

    Modbus和MQTT是工業領域中兩種不同的通信協議,在設計目標、應用場景、通信模式等方面存在顯著差異,以下從多個維度兩者的區別: 1.設計目標與起源 Modbus 誕生于1979年,由施耐德
    的頭像 發表于 07-10 14:10 ?986次閱讀

    儀科技PXI CONNECT 2025圓滿收官

    儀科技主辦的業內矚目的國內PXI模塊儀器領域年度技術盛會——PXI CONNECT 2025,于6月27日在西安圓滿收官。本次活動匯聚了眾多技術專家、工程師與生態合作伙伴,圍繞豐富的技術議題
    的頭像 發表于 07-05 16:10 ?2108次閱讀

    儀科技PXI CONNECT 2025亮點搶先看

    PXI CONNECT 2025 技術盛會將以“擴大測試測量生態圈”為主題,全方位展示儀在模塊測控領域的最新成果。
    的頭像 發表于 06-06 16:00 ?1131次閱讀
    <b class='flag-5'>簡</b>儀科技PXI CONNECT 2025亮點搶先看

    以太彩光網絡解決方案4.0正式發布,“彩光”重構園區網絡極之道

    了一場從底層基因出發的極革命,通過架構、部署、運維等多維度的創新升級,以強大的適配能力全面賦能教育、醫療、企業等多園區場景,拓展未來網絡的應用邊界。 01:從全光網發展最新態勢,看“光,為何要'簡單'” 發布會現場, 銳捷網絡
    的頭像 發表于 05-30 12:14 ?584次閱讀
    極<b class='flag-5'>簡</b>以太彩光網絡解決方案4.0正式發布,“彩光”重構園區網絡極<b class='flag-5'>簡</b>之道