EQueue 2.3.2版本釋出(支援高可用)
前言
前段時間針對EQueue的完善終於告一段落了,實在值得慶祝,自己的付出和堅持總算有了成果。這次新版本主要為EQueue實現了叢集功能,基本實現了Broker的高可用。另外還增加了很多實用的功能,對效能也做了很多優化。總之,EQueue越來越成熟了。
EQueue最新版本資訊
版本釋出說明
- 為Broker支援叢集部署的功能,解決針對訊息生產者的高可用;
- 支援顯示無線上消費者的消費者分組,並支援刪除這些消費者分組;
- 支援刪除訊息時配置是否需要判斷訊息已經消費過;
- 完善重置消費進度的功能,重置後可立即看到效果;
- 採用雙緩衝佇列,提高Broker的效能;優化後單臺Broker的效能:單發10W TPS;單收10W TPS;同時收發 8.5W TPS;訊息大小為1KB;Broker配置:8核16G,虛擬機器;
- 管理控制檯功能極大的完善;
- 可配置按時間刪除訊息,滿足使用者希望訊息只儲存最近1天的需求;
- 支援Pull模式,允許高階使用者自己拉取訊息,自己消費,自己提交消費進度;
為什麼要做高可用
經過了一個多月的業餘時間的努力,終於為EQueue增加了Broker的叢集功能。作為一個分散式訊息中介軟體,除了效能之外,我們還關注其高可用,高可用指的是Broker的高可用。要實現Broker的高可用,最基本的條件是Broker要支援叢集部署的能力。假設一個叢集內我們部署了5臺Broker,然後掛掉幾臺,如果對Producer, Consumer都沒有影響,則我們可以說Broker支援高可用。
這次釋出的EQueue的版本,實現了Broker的叢集部署,但是還沒有實現Broker的主備。所以,在架構上來講,支援了對Producer的高可用,但是對Consumer來說還沒有實現高可用。因為如果有一臺Broker掛了,則Producer可以將訊息傳送到Broker叢集中的其他的Broker,所以對Producer沒有影響。但是對Consumer是有影響的。因為此時掛掉的這臺Broker上的訊息在掛掉的這段時間內就無法被Consumer消費了。必須等到Broker重新起來後才能被消費。而如果實現了Broker的主備功能,則當Broker Master掛掉了,則因為Broker Slave還在,所以Consumer可以從Broker Slave上消費訊息。從而可以做到對Consumer的高可用。Broker的主備功能,還能保證訊息的可靠性。因為假設Broker Master的硬碟壞掉了,訊息也不會丟失,因為Broker Slave上還有訊息。
所以,總結一下就是:
- Broker叢集功能解決的是針對Producer傳送訊息的高可用;
- Broker主備功能解決的是針對Consumer消費訊息的高可用,以及訊息的可靠性保證;
新版EQueue架構說明
下一個版本的EQueue將會實現Broker的主備功能。目前EQueue的高可用部署架構如下圖所示:
架構說明:
- 總共有Producer, Consumer, Broker, Name Server四種伺服器角色;
- Name Server的職責是負責管理所有的Broker,併為Producer,Consumer提供Broker資訊以及所有Topic的路由資訊;
- 從部署邏輯上看,Broker Master, Broker Slave是屬於一個邏輯上的單元,一個Broker Master可以配置多個Broker Slave;所以,我設計了一個Broker Group的概念。同一個Broker Group中可以有一個Broker Master和多個Broker Slave;
- Broker啟動時,
- 與配置的所有的Name Server建立TCP長連線;
- 定時(5s,可配置)向所有的Name Server註冊自己的所有資訊,主要包括:基本資訊、佇列資訊、消費資訊、生成者資訊、消費者資訊;
- Name Server之間無聯絡,資料無同步;Name Server也可以部署多臺,由於每臺Broker都會向所有的Name Server註冊自己的資訊,所以,理論上所有的Name Server裡維護的資訊最終都是完全一致的;Name Server不持久化任何東西,啟動後只在記憶體中維護所有Broker上報上來的資訊;Name Server不與其他任何伺服器主動通訊;
- Broker Slave會從Broker Master通過拉的方式同步訊息,並存儲到本地磁碟,訊息同步為非同步同步;
- Producer啟動時,
- 與配置的所有Name Server伺服器建立TCP長連線;
- 隨機選擇一臺Name Server獲取所有可用的Broker列表,對所有的Broker建立TCP長連線,並定時(5s,可配置)更新所有可用的Broker列表;
- 定時(1s,可配置)向所有當前連線的Broker傳送心跳,將自己的資訊註冊到Broker;
- 定時(5s,可配置)從Name Server獲取所有當前叢集的所有Topic的佇列資訊;
- 傳送Topic時,如果該Topic的佇列資訊在本地存在,則直接從本地獲取佇列資訊;如果不存在,則嘗試從Name Server獲取,如果Name Server上獲取不了,則認為該Topic下沒有佇列資訊;如果沒有獲取到佇列資訊,則會重試這個步驟5次(可配置),以保證儘量能傳送訊息成功;
- Consumer啟動時,
- 與配置的所有Name Server伺服器建立TCP長連線;
- 隨機選擇一臺Name Server獲取所有可用的Broker列表,對所有的Broker建立TCP長連線,並定時(5s,可配置)更新所有可用的Broker列表;
- 定時(1s,可配置)向所有當前連線的Broker傳送心跳,將自己的資訊註冊到Broker;
- 定時(5s,可配置)從Name Server獲取所有當前叢集的所有Topic的佇列資訊;
- 定時(每隔1s,可配置)進行消費者負載均衡,消費者負載均衡的邏輯是,針對當前消費者訂閱的每個Topic,執行下面的邏輯:
- 從本地獲取該Topic的所有佇列資訊;
- 從Broker叢集中的第一臺啟動的並且可用的Broker獲取所有當前線上的消費者;
- 根據獲取到的佇列和消費者資訊,按佇列個數平均的目的為演算法,為消費者平均分配佇列,完成消費者負載均衡的目的;
- Broker的Producer心跳超時時間預設為10s;Broker的Consumer心跳超時時間預設為10s;Name Server的Broker超時時間未10s;
EQueue管理控制檯
因為支援了叢集功能,所以管理控制檯也需要增加相應的管理功能支援。主要是要支援以叢集為單位檢視叢集下的所有Broker列表,以Topic為單位檢視每個Topic在哪些Broker上存在,以Consumer Group為單位檢視每個Consumer Group下有哪些消費者,每個消費者分別正在消費哪些佇列等;總結起來,目前的EQueue管理控制檯支援以下功能:
- 檢視當前有哪些叢集;
- 檢視某個叢集下有哪些Broker,每個Broker的傳送TPS,消費TPS,總訊息堆積數;
- 檢視單個Broker的詳細資訊,如監聽的埠,訊息儲存資訊,總的傳送和消費TPS,Topic數、佇列數、消費者組個數、消費者個數、生產者個數、該Broker上的佇列資訊、消費資訊、生產者列表、消費者列表,最近傳送的100條訊息,佇列擴容、縮容、重置佇列消費進度,etc;
- 檢視某個叢集下的佇列資訊、消費資訊、生產者列表、消費者列表;
- 檢視某個叢集下的所有佇列的傳送TPS,消費TPS;
- 檢視某個叢集下根據訊息ID檢視某個訊息的詳情;
- 單個叢集下支援的操作:
- 新增一個Topic,該Topic會自動在該叢集下的所有Broker上建立;
- 刪除一個Topic,該Topic會自動在該叢集下的所有Broker上刪除;
- Topic的佇列擴容,自動在叢集下的所有Broker上擴容;
- Topic的佇列縮容,自動在叢集下的所有Broker上縮容;
- 重置佇列消費進度,自動在叢集下的所有Broker上的該佇列重置佇列消費進度;
- 支援訊息堆積報警,傳送郵件;
下圖為管理控制檯的介面,供大家參考理解:
最後,大家對新版的EQueue的叢集功能有興趣的,可以進一步觀看我之前在鬥魚上直播的視訊:
相關推薦
EQueue 2.3.2版本釋出(支援高可用)
前言 前段時間針對EQueue的完善終於告一段落了,實在值得慶祝,自己的付出和堅持總算有了成果。這次新版本主要為EQueue實現了叢集功能,基本實現了Broker的高可用。另外還增加了很多實用的功能,對效能也做了很多優化。總之,EQueue越來越成熟了。 EQueue最新版本資訊 版本釋出說明
Spark Release 2.3.0 版本釋出新特性和優化
Apache Spark 2.3.0是2.x系列中的第四個版本。此版本增加了對結構化流中的連續處理以及全新的Kubernetes Scheduler後端的支援。其他主要更新包括新的DataSource和結構化Streaming v2 API,以及一些PySpark效能增強。此
51Nod1010 只包含因子2 3 5的數(打表+ lower_bound)
lower_bound這個函式挺好用的。 #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; c
關於tp3.2.3檔案匯入資料庫(去除重複資料)、寫日誌和下載問題
假設我們有一個student.csv檔案和一個student庫,現在要將student.csv檔案匯入資料庫。1.關於去掉重複資料匯入資料庫的基本思路 (1)首先我們將student資料庫裡的學號(no)取出來,放在$arrNo數組裡。 (2)然後,
IntelliJ IDEA 2018.2.1激活碼(親測可用)
idea bll npr nlb set pre xxd cme number 選擇Activation code,復制下方激活碼到輸入框即可完成激活。 K03CHKJCFT-eyJsaWNlbnNlSWQiOiJLMDNDSEtKQ0ZUIiwibGljZW5zZWVO
面試官:你是如何使用JDK來實現自己的快取(支援高併發)?
需求分析 專案中經常會遇到這種場景:一份資料需要在多處共享,有些資料還有時效性,過期自動失效。比如手機驗證碼,傳送之後需要快取起來,然後處於安全性考慮,一般還要設定有效期,到期自動失效。我們怎麼實現這樣的功能呢? 解決方案 使用現有的快取技術框架,比如redis,ehcache。優點:成熟,穩定,功能強大;
zookeeper示例--(主從高可用)實時更新server列表
和balance高可用可以設計出很穩定的後臺任務架構。http://sling2007.blog.163.com/blog/static/84732713201362563350363/ 場景描述 在分散式應用中, 我們經常同時啟動多個server, 呼叫方(client
Spring Cloud 05 (Eureka 高可用)
兩臺Eureka Server伺服器進行高可用配置(本機測試)1.為兩臺機器Server啟動設定不同的埠2.Server1註冊到Server2上,Server2註冊到Server1上生產環境配置 假定需要配置三臺Eureka Server,配置圖如下服務註冊發現(Eur
[Spark版本更新]--Spark-2.3.2釋出說明
2018-09-24 Apache spark又釋出新版本了,看看發行說明: sub-task [ SPARK-24976 ] - 允許十進位制型別轉換null(特定於PyArrow 0.9.0) bug [ SPARK-23243&nb
【精華】PhalApi 2.x 新版本釋出流程(歡迎來開源)
當前,2.x新版本釋出的流程,主要如下。 重要的資訊 PhalApi 2.x Kernal核心包(底層程式碼在這裡):https://github.com/phalapi/kernal PhalApi 2.x 專案(直接可用於開發的專案):https://github.com/phalapi/p
opencv,我的電腦轉換2.49版本和3.0版本筆記(vs2015)
會配置的直接從3開始改配置路徑,前面的基本上已經配置過了,出錯的直接重修配置一遍就行, 本系列文章由出品,轉載請註明出處。 寫作當前博文時配套使用的OpenCV版本: 2.4.8、2.4.9、3.0 ( 2014年4月28更新OpenCV 2
jumpserver-0.3.2 堡壘機環境搭建(圖文詳解)
其他 install yum mage -128 req isa 解決 qq密碼 下載安裝包:https://github.com/jumpserver/jumpserver.git 解壓 三、執行快速安裝腳本 cd /opt/jumpserver/install pip
只包含因子2 3 5的數(數論,二分,加醜數思想)
space priority tdi ins number 給定 個數 sin algorithm 個人心得:這題錯了很多很多次,一開始單純是想一直除2,3,5能除盡就可以了,但是數據太大,從第九組數據開始就超時了。 後面聽了隊友的意見打表,這裏用了醜數的思想,就是從2,3
structs2的048漏洞復現 2.3.32版本
重啟 clas arch ext pps index 找到 spa pan S2-048 遠程代碼執行漏洞 影響版本: 2.0.0 - 2.3.32 之前在網上說只要時2.3.*的版本都有這個漏洞,自己裝了個2.3.34的試了幾次都沒有執行 然後下載了找到了
只包含因子2 3 5的數(51nod 思維 打表)
K的因子中只包含2 3 5。滿足條件的前10個數是:2,3,4,5,6,8,9,10,12,15。 所有這樣的K組成了一個序列S,現在給出一個數n,求S中 >= 給定數的最小的數。 例如:n = 13,S中 >= 13的最小的數是15,所以輸出15。 Input 第1行:一個數T
【51Nod - 1010 】只包含因子2 3 5的數 (打表,有坑越界)
題幹: K的因子中只包含2 3 5。滿足條件的前10個數是:2,3,4,5,6,8,9,10,12,15。 所有這樣的K組成了一個序列S,現在給出一個數n,求S中 >= 給定數的最小的數。 例如:n = 13,S中 >= 13的最小的數是15,所以輸出15。 Inpu
struts2[2.3]引數獲得方式-(4)集合型別引數封裝(list和map)
1.學習路線 今天咱們來學struts2引數獲得方式,let`go!
struts2[2.3]引數獲得方式-(3)模型驅動獲得引數
1.學習路線 今天咱們來學struts2引數獲得方式,let`go!
struts2[2.3]引數獲得方式-(2)物件驅動獲得引數
1.學習路線 今天咱們來學struts2引數獲得方式,let`go!
struts2[2.3]引數獲得方式-(1)屬性驅動獲得引數
1.學習路線 今天咱們來學struts2引數獲得方式,let`go!