RocketMQ原理解析-consumer 2.消費端負載均衡
消費端負載均衡
消費端會通過RebalanceService執行緒,10秒鐘做一次基於topic下的所有佇列負載
消費端遍歷自己的所有topic,依次調rebalanceByTopic
根據topic獲取此topic下的所有queue
選擇一臺broker獲取基於group的所有消費端(有心跳向所有broker註冊客戶端資訊)
選擇佇列分配策略例項AllocateMessageQueueStrategy執行分配演算法,獲取佇列集合Set<MessageQueue>mqSet
1) 平均分配演算法,其實是類似於分頁的演算法
將所有queue排好序類似於記錄
將所有消費端consumer排好序,相當於頁數
然後獲取當前consumer所在頁面應該分配到的queue
2) 按照配置來分配佇列, 也就是說在consumer啟動的時候指定了queue
3) 按照機房來配置佇列
Consumer啟動的時候會指定在哪些機房的訊息
獲取指定機房的queue
然後在執行如1)平均演算法
根據分配佇列的結果更新ProccessQueueTable<MessageQueue,ProcessQueue>
1) 比對mqSet 將多餘的佇列刪除,當broker當機或者新增,會導致分配到mqSet變化,
a) 將不在被本consumer消費的messagequeue的ProcessQueue刪除,其實是設定ProcessQueue的droped屬性為true
b) 將超過兩份中沒有拉取動作ProcessQueue刪除
//TODO 為什麼要刪除掉,兩分鐘後來了訊息怎麼辦?
//
2) 新增新增佇列,比對mqSet,給新增的messagequeue
構建長輪詢物件PullRequest物件,會從broker獲取消費的進度
構建這個佇列的ProcessQueue
將PullRequest物件派發到長輪詢拉訊息服務(單執行緒非同步拉取)
注:ProcessQueue正在被消費的佇列,
(1) 長輪詢拉取到訊息都會先儲存到ProcessQueue的TreeMap<Long, MessageExt>集合中,消費調後會刪除掉,用來控制consumer訊息堆積,
TreeMap<Long, MessageExt> key是訊息在此ConsumeQueue佇列中索引
(2) 對於順序訊息消費處理
locked屬性:當consumer端向broker申請鎖佇列成功後設置true,只有被鎖定的processqueue才能被執行消費
rollback: 將消費在msgTreeMapTemp中的訊息,放回msgTreeMap重新消費
commit: 將臨時表msgTreeMapTemp資料清空,代表消費完成,放回最大偏移值
(3) 這裡是個TreeMap,對key即訊息的offset進行排序,這個樣可以使得訊息進行順序消費
相關推薦
RocketMQ原理解析-consumer 2.消費端負載均衡
消費端負載均衡 消費端會通過RebalanceService執行緒,10秒鐘做一次基於topic下的所有佇列負載 消費端遍歷自己的所有topic,依次調rebalanceByTopic 根據topic獲取此topic下的所有queue 選擇一臺broker獲取基
RocketMQ原理解析-consumer 5.push消費-順序消費訊息
順序消費服務ConsumeMessageConcurrentlyService構建的時候 構建一個執行緒池來接收消費請求ConsumeRequest 構建一個單執行緒的本地執行緒,用來稍後定時重新消
RocketMQ原理解析-producer 2.如何傳送訊息
Producer輪詢某topic下的所有佇列的方式來實現傳送方的負載均衡 1) Topic下的所有佇列如何理解: 比如broker1, broker2, borker3三臺broker機器都配置了Topic_A Broker1 的佇列為queue0 , queue1
RocketMQ原理解析-consumer 3.長輪詢
Rocketmq的訊息是由consumer端主動到broker拉取的, consumer向broker傳送拉訊息請求, PullMessageService服務通過一個執行緒將阻塞佇列LinkedBlockingQueue<PullRequest>中的PullR
Spring Cloud Ribbon(客戶端負載均衡)(2)
1.引數配置 對於Ribbon的引數配置通常有兩種方式:全域性配置以及指定客戶端配置: 全域性配置:ribbon.<key>=<value>格式進行配置即可。<key>代表了Ribbon客戶端配置的引數名,<value>代表了對應引數值。比
Ribbon使用及其客戶端負載均衡實現原理分析
1、ribbon負載均衡測試 (1)consumer工程新增依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artif
Spring原理解析(2)- IOC容器
Spring IoC容器介紹 IOC叫控制反轉,DI叫依賴注入,是對IOC更簡單的詮釋。 控制反轉是把傳統上由程式程式碼直接操控的物件的呼叫權交給容器。就是對元件物件控制權的轉移,從程式程式碼本身轉移到了spring
RocketMQ原理解析-producer 3.如何傳送順序訊息
Rocketmq能夠保證訊息嚴格順序,但是Rocketmq需要producer保證順序訊息按順序傳送到同一個queue中,比如購買流程(1)下單(2)支付(3)支付成功,這三個訊息需要根據特定規則將這個三個訊息按順序傳送到一個queue 如何實現把順序訊息傳送到同一個qu
RocketMQ原理解析-Remoting1. 通訊層實現
Rocketmq的通訊層是基於通訊框架netty 4.0.21.Final之上做了簡單的協議封裝,是強依賴。 一: NettyRemotingAbstract Server與Client公用抽象類 ResponseFuture模式: invokeSyn
Spring Cloud Stream應用與自定義RocketMQ原理解析
概述Spring Cloud Stream 簡介Spring Cloud Stream 是一個用來為微服務應用構建訊息驅動能力的框架。它可以基於Spring Boot 來建立獨立的,可用於生產的Spring 應用程式。他通過使用Spring Integration來連線訊息代
RocketMQ原理解析-broker 4.HA & master slave
在broker啟動的時候BrokerController如果是slave,配置了master地址更新,沒有配置所有broker會想namesrv註冊,從namesrv獲取haServerAddr,然後更新到HAClient 當HAClient的MasterAddress不
深入理解Spring Cloud Ribbon客戶端負載均衡原理(一 實現服務實例地址轉換)
missing 組織 not final str dynamics string pla pan 在使用spring cloud搭建微服務架構時,需要進行負載均衡操作。負載均衡分為硬件負載均衡和軟件負載均衡,軟件負載均衡又分為服務端負載均衡和客戶端負載均衡。本系列主要介紹利
客戶端負載均衡Ribbon之原始碼解析
什麼是負載均衡器? 假設有一個分散式系統,該系統由在不同計算機上執行的許多服務組成。但是,當用戶數量很大時,通常會為服務建立多個副本。每個副本都在另一臺計算機上執行。此時,出現 “Load Balancer(負載均衡器)”。它有助於在伺服器之間平均分配傳入流量。 伺服器端負載均衡器 傳統上,Load Bala
深入理解@LoadBalanced註解的實現原理與客戶端負載均衡
前提 在閱讀這篇部落格之前,希望你對SpringCloud套件熟悉和理解,更希望關注下微服務開發平臺 概述 在使用springcloud ribbon客戶端負載均衡的時候,可以給RestTemplate bean 加一個@LoadBalanced註解,就能讓這個RestTemplate在請求時擁有客戶端負載均
Spring Cloud 客服端負載均衡 Ribbon
present cer 內容 uri erl 元數據 creat arraylist dave 一、簡介 Spring Cloud Ribbon 是一個基於Http和TCP的客服端負載均衡工具,它是基於Netflix Ribbon實現的。它不像
筆記:Spring Cloud Ribbon 客戶端負載均衡
系統架構 aging gap release 架構 err 接口 frame enable Spring Cloud Ribbon 是一個基於 HTTP 和 TCP 的客戶端負載均衡工具,基於 Netflix Ribbon 實現,通過Spring Cloud 的封裝,可以讓
客戶端負載均衡Ribbon之一:Spring Cloud Netflix負載均衡組件Ribbon介紹
erl status spring 使用 -c ive res 性能 bili Netflix:[‘netfli?ks] ribbon:英[?r?b?n]美[?r?b?n]n. 帶; 綬帶; (打印機的) 色帶; 帶狀物;v. 把…撕成條帶; 用緞帶
SpringCloud開發學習總結(四)—— 客戶端負載均衡Ribbon
均衡 spring java www ref discovery 聯合 方式 嘗試 通過上一章《SpringCloud開發學習總結(三)—— 服務治理Eureka》,我們已經搭建起微服務架構中的核心組件——服務註冊中心(包括單點模式和高可用模式)。同時還註冊了一個服務,
【SpringCloud】05—— Ribbon客戶端負載均衡
1.Ribbon 是什麼? 一套客戶端負載均衡工具. 舉例:視窗點餐,點餐時會分好幾個視窗,就是為了讓人員分攤到不同的視窗,來避免人員堆積,我們點餐的時候,作為客戶消費者會主動地選擇人員最少的視窗的去點餐.和客戶端結合實現負載均衡。 2.能做什麼? 負載均衡的工具,將使用者的請求分攤
《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon - 4
摘要 客戶端負載均衡元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。在Spring Cloud 中預設使用Ribbon作為客戶端負載均衡。 關鍵詞:客戶端負載均衡,Ribbon 一、什麼是客戶端負載均衡 負載均衡是對系統高可用、緩解網路壓力、處理能力擴容的重要手段之一。通常