亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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進程,這樣消息的存儲和轉(zhuǎn)發(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完全的順序?qū)憽?/p>

具體如下圖:

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水平擴展及負載均衡內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java8?Stream大數(shù)據(jù)量List分批處理切割方式

    java8?Stream大數(shù)據(jù)量List分批處理切割方式

    這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • SpringBoot文件上傳(本地存儲)回顯前端操作方法

    SpringBoot文件上傳(本地存儲)回顯前端操作方法

    這篇文章主要介紹了SpringBoot文件上傳(本地存儲)回顯前端操作方法的相關資料,文中講解了文件上傳的基本原理,包括前端調(diào)用后端接口上傳文件,后端返回文件路徑給前端,前端通過路徑訪問圖片,需要的朋友可以參考下
    2024-11-11
  • 實例講解java定時任務

    實例講解java定時任務

    這篇文章主要介紹了實例講解java定時任務,感興趣的的朋友可以參考下
    2015-08-08
  • Java中getResourceAsStream用法分析

    Java中getResourceAsStream用法分析

    這篇文章主要介紹了Java中getResourceAsStream用法,較為詳細的分析了getResourceAsStream的功能及用法,需要的朋友可以參考下
    2015-06-06
  • Java中HashSet和HashMap的區(qū)別_動力節(jié)點Java學院整理

    Java中HashSet和HashMap的區(qū)別_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java中HashSet和HashMap的區(qū)別_動力節(jié)點Java學院整理,需要的朋友可以參考下
    2017-04-04
  • 一文弄懂Java中ThreadPoolExecutor

    一文弄懂Java中ThreadPoolExecutor

    ThreadPoolExecutor是Java中的一個線程池實現(xiàn),它可以管理和控制多個 Worker Threads,本文就詳細的介紹一下Java中ThreadPoolExecutor,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • SpringBoot如何配置數(shù)據(jù)庫主從shardingsphere

    SpringBoot如何配置數(shù)據(jù)庫主從shardingsphere

    這篇文章主要介紹了SpringBoot如何配置數(shù)據(jù)庫主從shardingsphere問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java8中Stream的使用示例教程

    java8中Stream的使用示例教程

    Stream是Java8的一大亮點,是對容器對象功能的增強,下面這篇文章主要給大家介紹了關于java8中Stream使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • SpringBoot整合MybatisPlus的基本應用詳解

    SpringBoot整合MybatisPlus的基本應用詳解

    MyBatis-Plus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為 簡化開發(fā)、提高效率而生,本文將給大家介紹一下SpringBoot整合MybatisPlus的基本應用,需要的朋友可以參考下
    2024-05-05
  • java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼

    java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼

    這篇文章主要介紹了 java 根據(jù)經(jīng)緯度獲取地址實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-05-05

最新評論