最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的RocketMq水平擴展及負載均衡詳解

 更新時間:2024年01月08日 09:23:03   作者:獵戶星座。  
這篇文章主要介紹了Java的RocketMq水平擴展及負載均衡詳解,RocketMQ是一個分布式具有高度可擴展性的消息中間件,本文旨在探索在broker端,生產端,以及消費端是如何做到橫向擴展以及負載均衡的,需要的朋友可以參考下

前言

RocketMQ是一個分布式具有高度可擴展性的消息中間件。

本文旨在探索在broker端,生產端,以及消費端是如何做到橫向擴展以及負載均衡的。

Broker端水平擴展

Broker負載均衡

Broker是以group為單位提供服務。一個group里面分master和slave,master和slave存儲的數(shù)據(jù)一樣,slave從master同步數(shù)據(jù)(同步雙寫或異步復制看配置)。

通過nameserver暴露給客戶端后,只是客戶端關心(注冊或發(fā)送)一個個的topic路由信息。路由信息中會細化為message queue的路由信息。而message queue會分布在不同的broker group。所以對于客戶端來說,分布在不同broker group的message queue為成為一個服務集群,但客戶端會把請求分攤到不同的queue。

而由于壓力分攤到了不同的queue,不同的queue實際上分布在不同的Broker group,也就是說壓力會分攤到不同的broker進程,這樣消息的存儲和轉發(fā)均起到了負載均衡的作用。

Broker一旦需要橫向擴展,只需要增加broker group,然后把對應的topic建上,客戶端的message queue集合即會變大,這樣對于broker的負載則由更多的broker group來進行分擔。

并且由于每個group下面的topic的配置都是獨立的,也就說可以讓group1下面的那個topic的queue數(shù)量是4,其他group下的topic queue數(shù)量是2,這樣group1則得到更大的負載。

commit log

雖然每個topic下面有很多message queue,但是message queue本身并不存儲消息。真正的消息存儲會寫在CommitLog的文件,message queue只是存儲CommitLog中對應的位置信息,方便通過message queue找到對應存儲在CommitLog的消息。

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

具體如下圖:

Producer

Producer端,每個實例在發(fā)消息的時候,默認會輪詢所有的message queue發(fā)送,以達到讓消息平均落在不同的queue上。而由于queue可以散落在不同的broker,所以消息就發(fā)送到不同的broker下,如下圖:

Consumer負載均衡

集群模式

在集群消費模式下,每條消息只需要投遞到訂閱這個topic的Consumer Group下的一個實例即可。RocketMQ采用主動拉取的方式拉取并消費消息,在拉取的時候需要明確指定拉取哪一條message queue。

而每當實例的數(shù)量有變更,都會觸發(fā)一次所有實例的負載均衡,這時候會按照queue的數(shù)量和實例的數(shù)量平均分配queue給每個實例。

默認的分配算法是AllocateMessageQueueAveragely,如下圖:

還有另外一種平均的算法是AllocateMessageQueueAveragelyByCircle,也是平均分攤每一條queue,只是以環(huán)狀輪流分queue的形式,如下圖:

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

通過增加consumer實例去分攤queue的消費,可以起到水平擴展的消費能力的作用。而有實例下線的時候,會重新觸發(fā)負載均衡,這時候原來分配到的queue將分配到其他實例上繼續(xù)消費。

但是如果consumer實例的數(shù)量比message queue的總數(shù)量還多的話,多出來的consumer實例將無法分到queue,也就無法消費到消息,也就無法起到分攤負載的作用了。所以需要控制讓queue的總數(shù)量大于等于consumer的數(shù)量。

廣播模式

由于廣播模式下要求一條消息需要投遞到一個消費組下面所有的消費者實例,所以也就沒有消息被分攤消費的說法。

在實現(xiàn)上,其中一個不同就是在consumer分配queue的時候,會所有consumer都分到所有的queue。

到此這篇關于Java的RocketMq水平擴展及負載均衡詳解的文章就介紹到這了,更多相關RocketMq水平擴展及負載均衡內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Java語言中的抽象類與繼承

    詳解Java語言中的抽象類與繼承

    這篇文章主要為大家詳細介紹了Java語言中的抽象類與繼承的相關資料,文中的示例代碼講解詳細,對我們學習Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • 簡單介紹java中equals以及==的用法

    簡單介紹java中equals以及==的用法

    這篇文章主要介紹了簡單介紹java中equals以及==的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • IDEA配置tomcat服務器全過程

    IDEA配置tomcat服務器全過程

    這篇文章主要介紹了IDEA配置tomcat服務器全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot定時任務詳解與案例代碼

    SpringBoot定時任務詳解與案例代碼

    SpringBoot是一個流行的Java開發(fā)框架,它提供了許多便捷的特性來簡化開發(fā)過程,其中之一就是定時任務的支持,讓開發(fā)人員可以輕松地在應用程序中執(zhí)行定時任務,本文將詳細介紹如何在Spring?Boot中使用定時任務,并提供相關的代碼示例
    2023-06-06
  • Java中String對象的深入理解

    Java中String對象的深入理解

    String對象作為Java語言中重要的數(shù)據(jù)類型之一,是我們平時編碼最常用的對象之一,因此也是內存中占據(jù)空間最大的一個對象,然而很多人對它是一知半解,今天我們就來好好聊一聊這個既熟悉又陌生的String,需要的朋友可以參考下
    2023-05-05
  • resty upload無需依賴的文件上傳與下載

    resty upload無需依賴的文件上傳與下載

    這篇文章主要為大家介紹了resty upload中無需依賴的文件上傳與下載過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進步,早日升職加薪
    2022-03-03
  • Eclipse中如何引入JUnit進行單元測試

    Eclipse中如何引入JUnit進行單元測試

    這篇文章主要介紹了Eclipse中如何引入JUnit進行單元測試問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java中Integer的parseInt和valueOf的區(qū)別詳解

    Java中Integer的parseInt和valueOf的區(qū)別詳解

    這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類型,Integer.valueOf(s)是把字符串解析成Integer對象類型,其實int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下
    2023-11-11
  • java中設計模式之適配器模式

    java中設計模式之適配器模式

    這篇文章主要介紹了java中設計模式之適配器模式的相關資料,適配器模式將一個類的接口轉換成客戶期望的另一個接口。適配器讓原本不兼容的類可以合作得親密無間,需要的朋友可以參考下
    2017-09-09
  • SpringBoot實現(xiàn)JWT令牌失效的6種方案

    SpringBoot實現(xiàn)JWT令牌失效的6種方案

    JWT(JSON?Web?Token)作為一種輕量級的認證方式,被廣泛應用于現(xiàn)代Web應用和微服務架構中,然而,JWT的無狀態(tài)特性雖然帶來了擴展性優(yōu)勢,卻也帶來了令牌管理的挑戰(zhàn),特別是當需要使令牌提前失效時,本文將介紹在SpringBoot應用中實現(xiàn)JWT令牌失效的6種方案
    2025-06-06

最新評論

青冈县| 玉环县| 永春县| 闻喜县| 巴青县| 固镇县| 谢通门县| 全椒县| 邻水| 抚远县| 蒙自县| 太仆寺旗| 福安市| 曲松县| 宜宾县| 宁晋县| 手游| 哈巴河县| 泾源县| 高邑县| 雷波县| 鹿邑县| 沽源县| 眉山市| 体育| 林芝县| 灵台县| 永平县| 云和县| 洛阳市| 阿尔山市| 漳州市| 延寿县| 盐源县| 松滋市| 琼中| 建湖县| 岚皋县| 霍州市| 宁陵县| 隆昌县|