1. 程式人生 > >Kafka vs RocketMQ——多Topic對效能穩定性的影響

Kafka vs RocketMQ——多Topic對效能穩定性的影響

引言

上期我們對比了RocketMQ和Kafka在多Topic場景下,收發訊息的對比測試,RocketMQ表現穩定,而Kafka的TPS在64個Topic時可以保持13萬,到了128個Topic就跌至0.85萬,導致無法完成測試。我們不禁要問:

為什麼看不到Kafka效能暴跌的趨勢呢?

今天的測試,就來排查一下這個問題,然後驗證一下兩個系統對外服務的穩定性。本次測試,要引入“穩定性測試”這個概念,那什麼是穩定性測試呢?我們先來看一下定義:

穩定性測試:測試系統的長期穩定執行能力。在系統執行過程中,對系統施壓,觀察系統的各種效能指標以及伺服器的負載指標。

好像有點抽象,我們還是看一個例子吧。

下面的測試對比圖,是用來評測汗血寶馬和蒸汽機車誰快的一組競速曲線:

圖1 汗血寶馬和蒸汽火車的速度穩定性對比圖1 汗血寶馬和蒸汽火車的速度穩定性對比

上圖的橫軸表示測試時間,縱軸表示火車和馬的速度,可以看到,馬的加速和最高速度均好於火車。但是由於體力原因,15分鐘後,馬就很難維持最高速度,只能稍作休息再加速,直至體力耗盡;而火車全程達到最高速度就基本不會變了。所以結論很明顯,火車的速度穩定性優於汗血寶馬。

假想一下:如果測試時間只取15分鐘會得到什麼結論呢?汗血寶馬無論是加速,還是最高速度,乃至單位時間內通過的路程均完勝火車。所以如果是要對長途運輸做一個評測的話,那麼正確的測試方式是——拉長測試時間,以觀察被測物件的穩定性。

OK,再次回到我們上次測試留下的疑問——暴跌無趨勢。其原因很可能是,在早期的32Topic,64Topic時,Kafka就已經出現了下跌的趨勢,只是我們壓測的時間不夠,算作測試通過了。

本期測試,我們沿用上一期的測試方式,唯一不同的就是把壓測時間從15分鐘拉長到1小時,看看在較長的壓力時間內,Kafka和RocketMQ哪一個產品對外服務更穩定。

測試目的

訊息收發端共存的情況下,RocketMQ和Kafka各執行約1個小時,觀察不同Topic數量時,Kafka、RocketMQ效能指標(TPS&響應時間)的波動性。

測試場景

預設每個Topic的分割槽數為8,每個Topic對應一個訂閱者,逐步增加Topic的數量,這裡效能是否抖動根據趨勢圖做直觀的判斷,資料如下:

做完全部的測試場景後會發現,正如之前的猜測,Kafka在32和64個Topic時,就已經出現了不穩定的情況。下面看一下32和64個Topic的詳細資料,如下圖所示:

圖2. 32個Topic效能曲線對比圖2. 32個Topic效能曲線對比

藍色Kafka的TPS曲線在18分鐘以後,就開始上下波動,毫無規律,而RocketMQ則表現穩定。下面再看64個Topic的情況,如下圖所示:

圖3. 64個Topic效能曲線對比圖3. 64個Topic效能曲線對比

圖4. 64個Topic客戶端傳送響應時間對比圖4. 64個Topic客戶端傳送響應時間對比

Kafka的TPS在前20分鐘保持穩定,並大幅度領先RocketMQ。20分鐘後又開始出現不規則波動,這些波動直接導致響應時間的變化(圖4),某個時刻Kafka的客戶端響應時間會達到25毫秒,而RocketMQ全程都是5毫秒。
這次的對比3個場景中, Kafka勝出一個,就是8個Topic的場景,如圖5所示,由於Topic個數和分割槽數的限制,導致Kafka只適合小規模的業務系統。

圖5. 8個Topic效能曲線對比圖5. 8個Topic效能曲線對比

測試結論

  1. Topic數的增加對RocketMQ無影響,長時間執行服務非常穩定。
  2. Kafka 的Topic數量建議不要超過8個。8個以上的Topic會導致Kafka響應時間的劇烈波動,造成部分客戶端的響應時間過長,影響客戶端投遞的實時性以及客戶端的業務吞吐量。

附錄

測試環境

服務端為單機部署,機器配置如下:

CPU24核
記憶體94G
硬碟Seagate Constellation ES (SATA 6Gb/s) 2.00 TB 7202 rpm
網絡卡1000Mb/s

應用版本:

訊息中介軟體版本
Kafka0.8.2
RocketMQ3.4.8

測試指令碼:

壓力端Jmeter的java客戶端
訊息大小128 位元組
併發數能達到服務端最大TPS的最優併發
Topic分割槽數量8
刷盤策略非同步落盤

未完待續

經過本期的測試,RocketMQ在穩定性上也是完勝Kafka,如果只是小規模的業務,Kafka可以滿足需求,但要是對業務的複雜度和穩定性有更高的要求,RocketMQ則是更好的選擇。

本期測試暫時告一段落了,但Kafka和RocketMQ的對戰並沒有停止,更多的場景對比還在後面,敬請期待後續的比拼!

轉載於:http://jm.taobao.org/2016/04/20/kafka-vs-rocketmq-3/

相關推薦

Kafka vs RocketMQ——Topic效能穩定性影響

引言上期我們對比了RocketMQ和Kafka在多Topic場景下,收發訊息的對比測試,RocketMQ表現穩定,而Kafka的TPS在64個Topic時可以保持13萬,到了128個Topic就跌至0.85萬,導致無法完成測試。我們不禁要問:為什麼看不到Kafka效能暴跌的趨

訊息中介軟體學習總結(12)——KafkaRocketMQTopic效能穩定性影響比較分析

引言 上期我們對比了RocketMQ和Kafka在多Topic場景下,收發訊息的對比測試,RocketMQ表現穩定,而Kafka的TPS在64個Topic時可以保持13萬,到了128個Topic就跌至0.85萬,導致無法完成測試。我們不禁要問: 為什麼看不到Kafka效能

Kafka VS RocketMq

淘寶內部的交易系統使用了淘寶自主研發的Notify訊息中介軟體,使用Mysql作為訊息儲存媒介,可完全水平擴容,為了進一步降低成本,我們認為儲存部分可以進一步優化,2011年初,Linkin開源了Kafka這個優秀的訊息中介軟體,淘寶中介軟體團隊在對Kafka做過充分Review之後,Kafka無限

測試go協程併發寫入記憶體和磁碟效能影響

最近希望能把一些過程,由傳統的順序執行改變成併發執行,看這樣的優化是否能帶來效能的提高。於是寫了幾個test來測試帶來的影響。 測試的環境為mac pro,2.3 GHz Intel Core i5(雙核),16GB記憶體。 (1)先測試併發寫入記憶體是否能夠得到效能的提高

再談Python執行緒--避免GIL效能影響

在Python中使用多執行緒,如果你對GIL本身沒有一定的瞭解;那麼很有可能你只是寫出了正確的多執行緒程式碼,而並沒有達到多執行緒的目的,甚至截然相反的效果。下面介紹了Python中GIL的作用和侷限性,並提供了避免GIL影響效能的幾個建議。 GIL是CPython中特有

【百度】大型網站的HTTPS實踐(三)——HTTPS效能影響

HTTPS在保護使用者隱私,防止流量劫持方面發揮著非常關鍵的作用,但與此同時,HTTPS也會降低使用者訪問速度,增加網站伺服器的計算資源消耗。本文主要介紹HTTPS對效能的影響。 HTTPS對訪問速度的影響 在介紹速度優化策略之前,先來看下HTTPS對速度有什麼影響。影響主要來自兩方面:協議互動所增加的網

mysql優化之sql執行流程及表結構(schema)效能影響

part 1 sql執行流程(如下圖所示) 1、客戶端傳送一條查詢到伺服器。 2、伺服器通過許可權檢查後,先檢查查詢快取,命中則直接返回結果。否則進入3。 3、伺服器進行sql解析,預處理,再由優化器根據該sql涉及到的資料表的資訊計算,生成執行計劃。 4.、MySQL根據優化器生成的執行計劃,呼叫儲

cpu 分支預測效能影響

cpu 分支預測對效能的影響 現在的 cpu 一般都支援分支預測功能。維基百科中有以下描述: 在計算機體系結構中,分支預測器(英語:Branch predictor)是一種數位電路,在分支指令執行結束之前猜測哪一路分支將會被執行,以提高處理器的指令流水線的效能。使用分支預

資料庫新增索引效能影響以及使用場景

1.新增索引後查詢速度會變快   mysql中索引是儲存引擎層面用於快速查詢找到記錄的一種資料結構,索引對效能的影響非常重要,特別是表中資料量很大的時候,正確的索引會極大的提高查詢效率。簡單理解索引,就相當於一本磚頭厚書的目錄部分,通過目錄可以快速查詢到想要找的內容具體所在

ArrayList初始容量效能影響

package testList; import java.util.ArrayList; public class TestLArrayList { public static void main(String[] args) { System.out.prin

關於IOPS指標效能影響

1.2 示例 Device Type IOPS Interface Notes 7,200 rpm SATA drives HDD ~75-100 IOPS[2] SATA 3 Gb/s 10,000 rpm SA

StringBuilder記憶體碎片效能影響

# StringBuilder記憶體碎片對效能的影響 ## TL;DR: `StringBuilder`內部是由多段`char[]`組成的**半自動連結串列**,因此頻繁從**中間**修改`StringBuilder`,會將原本連續的記憶體分隔為多段,從而影響讀取/遍歷效能。 連續記憶體與不連續記憶體的效

誰是效能殺手?KafkaTopic下啟用SSL時延增大問題分析

問題背景 專案中將Kafka介面進行RESTful封裝,在使用RESTful介面進行效能測試時,發現Topic數增多後,開啟SSL與非SSL進行測試,發現開啟SSL後效能下降得厲害。例如600個Topic總數每個Topic3分割槽3副本的場景下,使用1200個執行緒只發送10個Topic,開啟SSL的T

with as 語句效能的提示有大?

    今天學習了資料庫with as 子查詢的用法,在網上查詢資料說用這個用法對效能有一定的提升。     所以我做了下面的一個示例:   (1)    select * from zwkmzd2013 where zwkmzd_kmbh in (select zwpzf

序例化

() put args 多個 stat println clas 一個 數組參數 package serializable.cn; import java.io.Serializable; /* * 多個對象序例化 */ public class Person i

oc56--ARC象的內存管理

沒有 Owner 管理 bject -a const nbsp int argc // main.m // ARC中多個對象的內存管理:ARC的內存管理就是MRC的內存管理(一個對象釋放的時候,必然會把它裏面的對象釋放),只不過一個是Xcode加的代碼,一個是我們自己

實際項目中系統穩定性的一些思考

技術 場景 每次 自己 html 能說 控制 bsp 進行 說起系統穩定性,其實已經有很多文章了.我這裏結合自己實際項目中的一些情況,進行了反思. 業務場景其實也很簡單.就是我們需要做一個爬蟲去爬取別的網站的文章和圖片. 主要問題出在圖片上,當時我在想可不可以不爬取

filebeat topic設置

type multi path fields led ble log data -- cat filebeat.yml output.kafka: enabled: true hosts: ["192.168.111.107:9092","192.16

TERSUS畫畫一樣開發軟件 集合類元件介紹-象處理元件1

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中多個對象處理元件包括:是否存在於一組對象中(Appears)元件、從一組對象中去除(Exclude From List)元件、一組對象的總數計算(Count)元件 是否存在於一組對象中(Appears)元件:是檢查一組對象中,是否有某

TERSUS畫畫一樣開發軟件 集合類元件介紹-象處理元件2

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中多個對象處理元件還包括:合並兩組對象(Merge)元件、對象分組(Group Items)元件、數字篩選(Filter Numbers)元件 合並兩組對象(Merge)元件:是將兩組對象合為一組對象,比如兩個表格中每行數據結構相同,則