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

Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

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

前言

RocketMQ是一個(gè)分布式具有高度可擴(kuò)展性的消息中間件。

本文旨在探索在broker端,生產(chǎn)端,以及消費(fèi)端是如何做到橫向擴(kuò)展以及負(fù)載均衡的。

Broker端水平擴(kuò)展

Broker負(fù)載均衡

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

通過(guò)nameserver暴露給客戶(hù)端后,只是客戶(hù)端關(guān)心(注冊(cè)或發(fā)送)一個(gè)個(gè)的topic路由信息。路由信息中會(huì)細(xì)化為message queue的路由信息。而message queue會(huì)分布在不同的broker group。所以對(duì)于客戶(hù)端來(lái)說(shuō),分布在不同broker group的message queue為成為一個(gè)服務(wù)集群,但客戶(hù)端會(huì)把請(qǐng)求分?jǐn)偟讲煌膓ueue。

而由于壓力分?jǐn)偟搅瞬煌膓ueue,不同的queue實(shí)際上分布在不同的Broker group,也就是說(shuō)壓力會(huì)分?jǐn)偟讲煌腷roker進(jìn)程,這樣消息的存儲(chǔ)和轉(zhuǎn)發(fā)均起到了負(fù)載均衡的作用。

Broker一旦需要橫向擴(kuò)展,只需要增加broker group,然后把對(duì)應(yīng)的topic建上,客戶(hù)端的message queue集合即會(huì)變大,這樣對(duì)于broker的負(fù)載則由更多的broker group來(lái)進(jìn)行分擔(dān)。

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

commit log

雖然每個(gè)topic下面有很多message queue,但是message queue本身并不存儲(chǔ)消息。真正的消息存儲(chǔ)會(huì)寫(xiě)在CommitLog的文件,message queue只是存儲(chǔ)CommitLog中對(duì)應(yīng)的位置信息,方便通過(guò)message queue找到對(duì)應(yīng)存儲(chǔ)在CommitLog的消息。

不同的topic,message queue都是寫(xiě)到相同的CommitLog 文件,也就是說(shuō)CommitLog完全的順序?qū)憽?/p>

具體如下圖:

Producer

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

Consumer負(fù)載均衡

集群模式

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

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

默認(rèn)的分配算法是AllocateMessageQueueAveragely,如下圖:

還有另外一種平均的算法是AllocateMessageQueueAveragelyByCircle,也是平均分?jǐn)偯恳粭lqueue,只是以環(huán)狀輪流分queue的形式,如下圖:

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

通過(guò)增加consumer實(shí)例去分?jǐn)俼ueue的消費(fèi),可以起到水平擴(kuò)展的消費(fèi)能力的作用。而有實(shí)例下線(xiàn)的時(shí)候,會(huì)重新觸發(fā)負(fù)載均衡,這時(shí)候原來(lái)分配到的queue將分配到其他實(shí)例上繼續(xù)消費(fèi)。

但是如果consumer實(shí)例的數(shù)量比message queue的總數(shù)量還多的話(huà),多出來(lái)的consumer實(shí)例將無(wú)法分到queue,也就無(wú)法消費(fèi)到消息,也就無(wú)法起到分?jǐn)傌?fù)載的作用了。所以需要控制讓queue的總數(shù)量大于等于consumer的數(shù)量。

廣播模式

由于廣播模式下要求一條消息需要投遞到一個(gè)消費(fèi)組下面所有的消費(fèi)者實(shí)例,所以也就沒(méi)有消息被分?jǐn)傁M(fèi)的說(shuō)法。

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

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

相關(guān)文章

  • 詳解Java語(yǔ)言中的抽象類(lèi)與繼承

    詳解Java語(yǔ)言中的抽象類(lèi)與繼承

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言中的抽象類(lèi)與繼承的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • 簡(jiǎn)單介紹java中equals以及==的用法

    簡(jiǎn)單介紹java中equals以及==的用法

    這篇文章主要介紹了簡(jiǎn)單介紹java中equals以及==的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • IDEA配置tomcat服務(wù)器全過(guò)程

    IDEA配置tomcat服務(wù)器全過(guò)程

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

    SpringBoot定時(shí)任務(wù)詳解與案例代碼

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

    Java中String對(duì)象的深入理解

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

    resty upload無(wú)需依賴(lài)的文件上傳與下載

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

    Eclipse中如何引入JUnit進(jìn)行單元測(cè)試

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

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

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

    java中設(shè)計(jì)模式之適配器模式

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

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

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

最新評(píng)論

万荣县| 南京市| 乌鲁木齐县| 耒阳市| 施秉县| 东丰县| 玉屏| 新蔡县| 古丈县| 东乡县| 涞源县| 客服| 新巴尔虎左旗| 平罗县| 毕节市| 平顺县| 石屏县| 东乡县| 灵武市| 肇州县| 武宁县| 延津县| 湟中县| 宜兰县| 林口县| 麦盖提县| 密云县| 诸暨市| 嘉定区| 抚顺县| 分宜县| 兰州市| 营山县| 怀集县| 乐陵市| 东安县| 常熟市| 从江县| 龙里县| 乌兰察布市| 抚州市|