Apache RocketMQ 4.8.0 發布,升級 DLedger 模式

2021-01-18 開源中國

Apache RocketMQ 4.8.0 已發布。發布公告顯示,在此版本中,社區對 RocketMQ 完成大量的優化和問題修復。此外,該版本從性能、功能和穩定性三個方面提升了 DLedger 模式能力。

據介紹,DLedger 是 OpenMessaging 中一個基於 Raft 的 CommitLog 存儲庫實現,從 RocketMQ 4.5.0 版本開始,RocketMQ 引入 DLedger 模式解決了 Broker 組內自動故障轉移的問題,而在 4.8.0 版本中,社區對 RocketMQ DLedger 模式進行了全面升級。

以下內容摘錄自發布公告。

性能升級異步化 pipeline 模式

RocketMQ 4.7.0 重新升級了同步雙寫的架構,利用異步化 pipeline 模式大幅提升了同步雙寫的性能。在 RocketMQ 4.8.0 中,社區將這一改進應用到 DLedger 模式中, 下圖展示了 DLedger 模式下 broker 處理髮送消息的過程。

在原本的架構中, SendMessageProcessor 線程對每一個消息的處理,都需要等待多數派複製成功確認,才會返回給客戶端,而在新版本中,利用 CompletableFuture 對線程處理消息的過程進行異步化改造,不再等待多數派的確認即可對下一個請求進行處理,Ack 操作由其他線程確認之後再進行結果處理並返回給客戶端。通過對複製過程進行切分並將其流水線化,減少線程的長時間等待,充分利用 CPU,從而大幅提高吞吐量。

批量日誌複製

Batch 一直是性能優化的重要方式,在新版本中,可以通過設置 isEnableBatchPush=true 來開啟 DLedger 模式的批量複製。通過將多條數據聚合在一個包中進行發送,可以降低收發包的個數,從而降低系統調用和上下文的切換。在數據發送壓力比較大,並且可能達到系統收發包瓶頸的情況下,批量複製能顯著提高吞吐量。值得注意的是,DLedger 模式下的批量複製並不會對單個包進行延時的攢批處理,因此不會影響單個消息的發送時延。

除了上述的性能優化,社區還對 DLedger 模式下影響性能的鎖、緩存等做了數項性能優化,使 DLedger 模式下的性能提升數倍。

穩定性升級

為了驗證和測試 Dledger 模式的可靠性,除了本地對 DLedger 模式進行了各種各樣的測試,社區利用 OpenMessaging-Chaos 框架對 RocketMQ DLedger 模式進行了大量 Chaos 測試。

OpenMessaging-Chaos 是一個利用故障注入來驗證各種消息平臺一致性和高可用性的測試框架,在 OpenMessaging-Chaos 的測試中,客戶端並發地向待測試集群發送和接收消息,中間會間隔性地對集群進行故障注入,最後給出測試結果,包括是否丟消息,是否有重複消息,集群平均故障恢復時間等。利用 OpenMessaging-Chaos,我們驗證了 DLedger 模式在以下故障注入場景下的表現:

random-partition(fixed-partition)故障隨機挑選節點進行網絡隔離,模擬常見的對稱網絡分區。 random-loss 故障隨機挑選節點並對這些節點接收和發送的網絡包進行按比例丟棄,模擬一些節點網絡較差的情況。 random-kill(minor-kill、major-kill、fixed-kill)故障模擬常見的進程崩潰情況。 random-suspend(minor-suspend、major-suspend、fixed-suspend)故障模擬一些慢節點的情況,比如發生Full GC、OOM等。 bridge 和 partition-majorities-ring 故障模擬比較極端的非對稱網絡分區。

以 minor-kill 故障注入為例,我們部署5個節點組成一組 DLedger 模式的 RocketMQ broker 進行 Chaos 測試。minor-kill 故障注入會隨機挑選集群中少數節點進程殺死,由於殺死少數節點,即使集群不可用也能在一段時間內恢復,方便測試集群平均故障恢復時間。

測試過程中我們設置四個客戶端並發向 RocketMQ DLedger 集群發送和接收消息,故障注入時間間隔為100s,即100s正常運行,100s故障注入,一直循環,整個階段一共持續2400s。測試結束後,OpenMessaging-Chaos 會給出測試結果和時延圖。下圖展示了整個測試過程中入隊操作的時延情況。

圖中縱坐標是是時延,橫坐標是測試時間,綠色框表示數據發送成功,紅色框表示數據發送失敗,藍色框表示不確定是否數據添加成功,灰色部分表示故障注入的時間段。可以看出一些故障注入時間段造成了集群短暫的不可用,一些故障時間段則沒有,這是合理的。由於是隨機網絡分區,所以只有殺死的少數節點包含 leader 節點時才會造成集群重新選舉,但即使造成集群重新選舉, DLedger 模式在一段時間後也會恢復可用性。

下圖是測試結束後 OpenMessaging-Chaos 給出的統計結果,可以看到一共成功發送了11W個數據,沒有數據丟失,這表明即使在故障下,RocketMQ DLedger 模式仍舊滿足 At Least Once 的投遞語義。此外,RTOTestResult 表明12次故障時間段一共發生了3次集群不可用的情況(與上述時延圖一致),但每次集群都能在30秒以內恢復,平均故障恢復時間在22秒左右。

在 OpenMessaging Chaos 測試過程中,我們發現了 DLedger 模式存在的數個隱性問題並進行了修復,提高了 DLedger 模式下對進程異常崩潰、慢節點、對稱/非對稱網絡分區、網絡丟包的容錯能力,也進一步驗證了 DLedger 模式的可靠性。

功能升級DLedger 模式支持 Preferred Leader

在舊版本中一組 Broker 中選誰作為 Leader 完全是隨機的。但是在新版中我們可以通過配置 preferredLeaderId 來指定優先選舉某個節點為 Leader,如下圖所示,通過在三個機房部署 DLedger 模式的 broker 組,利用 preferred leader可以更好的實現機房對齊的功能,圖中 DC1 中服務更好,我們可以優先選擇在DC1 中部署Master。此外,利用 preferred leader 還可以更好實現 DLedger 集群混部,從而充分利用機器資源。

DLedger 模式支持批量消息

從 RocketMQ 4.8.0 開始,DLedger 模式支持批量消息發送,從而在消息類型的支持上完全與 Master-Slave 部署形態保持一致。

除了對 DLedger 模式的大量優化,此 RocketMQ 版本一共包含 Improvement 25個,Bug Fix 11個,文檔和代碼格式優化 16個。

詳情查看 http://rocketmq.apache.org/release_notes/release-notes-4.8.0/。

相關焦點

  • Apache RocketMQ 4.4.0 發布
    萬眾期待的 4.4.0 版本終於在昨天成功發布,值得關注的新特性包括權限控制(ACL)和消息軌跡(Msg Trace)。下面大家解讀該版本引入的這兩大特性。
  • 在CentOS7上安裝RocketMQ 4.7.1
    前言阿里的fastjson的低版本(<=1.2.68)被爆出有安全漏洞,而RocketMQ 4.7.0使用了fastjson 1.2.62,因此需要將RocketMQ升級到 RocketMQ 4.7.1(fastjson 1.2.69)。
  • Apache SkyWalking(Incubating) 5.0.0-alpha 發布
    2017年12月8日,Apache軟體基金會孵化器項目管理委員會 ASF IPMC宣布「SkyWalking全票通過,進入Apache孵化器」。之後的4個月,SkyWalking進入了緊張的新版本開發迭代中。從3.x開始,SkyWalking核心團隊展示了自動探針的高性能,拓撲分析,JVM性能收集等多種能力,但是UI和複雜分析依然是短板。
  • Apache Kudu 1.8.0 發布,Hadoop 生態數據存儲系統
    Hadoop 數據存儲系統 Apache Kudu 1.8.0 已發布,該版本包含以下新特性:引入了手動數據重新平衡工具,可用於在平板電腦伺服器之間重新分配表副本改進診斷工具,使診斷和故障排除更加簡單添加了對 Spark Streaming DataFrames 的支持到 Kudu Spark 連接器為 Python 客戶端添加了Pandas支持詳情請看發布說明
  • Apache Hadoop 3.0.0 GA 正式發布,要求 Java 8
    今天凌晨 Apache Hadoop 3.0.0 GA 版本正式發布,這意味著我們就可以正式在線上使用 Hadoop 3.0.0 了!這個版本是 Apache Hadoop 3.0.0 的第一個穩定版本,有很多重大的改進,比如支持 EC、支持多於2個的NameNodes、Intra-datanode均衡器等等。
  • ECharts 4.8.0 發布
    Apache ECharts (incubating) 於 2020.05.25 正式發布 4.8.0 版本。
  • Apache Flex BlazeDS 4.7.0 發布 - OSCHINA - 中文開源技術交流社區
    Apache Flex BlazeDS 4.7.0 發布,Apache Flex BlazeDS 是基於伺服器的 Java 遠程和 Web 消息技術,允許開發者簡單連接到後端分布式數據和實時推送數據到
  • Apache Airflow 2.0 發布,Airbnb 開源的調度系統
    Apache Airflow 2.0.0 已正式發布,Airflow 是一個靈活、可擴展的工作流自動化和調度系統,可編集和管理數百 PB 的數據流。
  • Apache Struts 2.5.22 GA 發布
    Apache Struts 2.5.22 GA 已發布,官方稱 Apache Struts 2 是一個優雅、可擴展的框架,可用於創建企業級
  • 雲安全日報201204:Apache Tomcat應用伺服器發現信息洩露漏洞,需要...
    12月3日,Apache Tomcat安全團隊發布了安全更新,修復了Tomcat中信息洩露等重要漏洞。以下是漏洞詳情:漏洞詳情來源:https://lists.apache.org/thread.html/rce5ac9a40173651d540babce59f6f3825f12c6d4e886ba00823b11e5%40%3Cannounce.tomcat.apache.org%3ECVE-2020-17527 嚴重程度
  • Apache Pulsar 2.6.1 版本正式發布:功能增強,新增 OAuth2 支持
    在 Apache Pulsar 2.6.0 版本發布後的 2 個月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式發布!
  • Apache Maven 3.0.1 發布 - OSCHINA - 中文開源技術交流社區
    Maven 剛剛發布了 3.0.1 版本。 下載地址:http://maven.apache.org/download.html 改進內容: ** Bug * [MNG-4850] - [regression] several elements of server configuration in settings.xml are not honoured * [MNG-4858
  • Apache Flex BlazeDS 4.7.2 發布,Web 通訊工具
    Apache Flex BlazeDS 4.7.2 發布,Apache Flex BlazeDS 是基於伺服器的 Java 遠程和 Web 通訊工具,方便開發者連接後端分布式數據和實時推送數據到
  • Elastic Stack 6.0 beta 發布,開源系列合集
    Elastic Stack 6.0  beta 發布了,ElasticStack 是一系列開源產品的合集,包括 Elasticsearch、Kibana、Logstash 以及 Beats 等等
  • Apache DolphinScheduler 1.3.2 發布,性能提升 2~3 倍
    引言大數據任務調度作為大數據建設中的核心基礎設施,在經過社區用戶們長期的使用中,不少用戶對調度也提出了很多新的要求,為此,Apache DolphinScheduler(Incubating)經過長達  5 個多月的辛苦努力, 終於發布了
  • MySQL 8.0 正式版 8.0.11 發布:比 MySQL 5.7 快 2 倍
    正式版 8.0.11 已發布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,還帶來了大量的改進和更快的性能!注意:從 MySQL 5.7 升級到 MySQL 8.0 僅支持通過使用 in-place 方式進行升級,並且不支持從 MySQL 8.0 降級到 MySQL 5.7(或從某個 MySQL 8.0 版本降級到任意一個更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升級之前對數據進行備份。
  • MySQL 8.0 正式版 8.0.11 發布:比 MySQL 5.7 快 2 倍 - OS...
    正式版 8.0.11 已發布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,還帶來了大量的改進和更快的性能!注意:從 MySQL 5.7 升級到 MySQL 8.0 僅支持通過使用 in-place 方式進行升級,並且不支持從 MySQL 8.0 降級到 MySQL 5.7(或從某個 MySQL 8.0 版本降級到任意一個更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升級之前對數據進行備份。
  • 什麼是 ALC (Apache Local Community) Beijing?
    68 4 CarbonData 2016.6 2017.4 13 25 5 RocketMQ 2016.11 2017.9 13 26 6 Griffin 2016.12 2018.11 18 20 7 Weex 2016.11   14 26 8 ServiceComb
  • Apache Lens 2.4.0-beta 發布 - OSCHINA - 中文開源技術交流社區
    Apache Lens 2.4.0-beta 發布,此版本更新內容如下:子任務[LENS-113] - Document how to document a feature
  • 「漏洞預警」Apache Solr Velocity模板遠程代碼執行復現
    該漏洞可以攻擊最新版本的Solr,目前該漏洞利用詳情已經廣泛流傳於Github以及各大安全群,且公開的EXP可以執行任意命令並自帶回顯,官方暫未發布補丁。漏洞編號暫無影響版本7.0.1 / 7.1.0 / 7.5.0 / 7.7.1 / 7.7.2 / 8.1.0 / 8.1.1 / 8.2.0,漏洞環境靶機:192.168.50.122 (centos7)攻擊機:192.168.50.217 (mac)漏洞復現搭建靶場環境 Apache_Solr