ApacheKafka基準測試:每秒寫入2百萬(在三臺廉價機器上)(二)
生產者吞吐量與儲存資料
許多訊息系統的隱藏危險之一是,對於在記憶體中保留的資料,它們工作的很好。但當資料備份不消耗(因此需要儲存在磁碟上)時,它們的吞吐量下降一個數量級(或更多)。這意味著只要您的消費者保持訊息佇列及時清掉,事情就可以正常執行。但是一旦它們滯後,整個訊息層將備份未消耗的資料。備份導致資料進入磁碟,這反過來會導致效能下降到一個速率,這意味著訊息傳遞系統不能再跟上傳入的資料,並把它們備份或者直接掛掉。這是非常可怕的,因為在許多情況下,佇列的終極目的是優雅地處理這樣的情況。
由於Kafka對於未消費的訊息,總是保證O(1)的效能。
為了測試這個實驗,讓我們執行一段更長的時間,並在儲存的資料集增長時繪製結果:
該圖實際上顯示了效能方面的變化,但跟資料大小沒有影響,寫入TB資料後跟最初寫入幾百MB效能一樣好。
這種差異是由於Linux的I / O管理設施批處理資料,然後定期重新整理。我們在Kafka生產叢集配置上設定得更好。http://kafka.apache.org/documentation.html#hwandos
消費者吞吐量
現在讓我們將注意力轉向消費者吞吐量。
注意,複製因子不會影響此測試的結果,因為消費者只能從一個副本讀取,無視副本數量。同樣,生產者的確認級別也不重要,因為消費者只讀取完全確認的訊息(即使生產者不等待完全確認)。這是為了確保消費者看到的任何訊息是在leader切換(如果當前leader失敗)之後。
單個消費者
90452條記錄/秒(89.7 MB /秒)
第一次測試,我們將在一個執行緒從我們的6分割槽3副本主題消費5000萬條訊息。
kafka的消費者是非常高效的。它通過從檔案系統直接獲取日誌塊來工作。它使用sendfile API直接通過作業系統傳輸,而無需通過應用程式複製此資料的開銷。這個測試實際上是從日誌頭部開始,所以它正在做真正的I / O讀取。然而,在生產環境中,消費者幾乎完全從作業系統頁面快取中讀取,因為它正在讀取剛剛由一些生產者寫入的資料(因此仍然被快取)。實際上,如果您在生產伺服器上執行I / O stat,看到即使消耗了大量資料,也沒有任何物理讀取。
對於期望的Kafka,消費者廉價是很重要的。一方面,副本自身就是消費者,所以讓消費者便宜,使得複製便宜。另外,這樣可以將資料處理變成一種廉價的操作,因此我們不需要緊緊控制可擴充套件性。
三個消費者
2615968個記錄/秒(249.5 MB /秒)
讓我們重複同樣的測試,但是執行三個並行的消費者程式,每個程式在不同的機器,並且消耗同一主題。
如預期的那樣,基本是線性擴充套件。(不奇怪,因為我們的模型中的消費者是如此簡單)。
生產者和消費者
795064記錄/秒(75.8 MB /秒)
上述測試只包括生產者和消費者獨立執行。現在我們來做更符合實際情況的事情,一起執行。實際上,在技術上已經這樣做了,因為我們的副本複製是把伺服器當作消費者來實現的。
我們來執行測試。對於此測試,我們將在六分割槽3副本主題上執行一個生產者和一個消費者,這些主題將開始為空。生產者使用非同步複製。報告的吞吐量是消費者吞吐量(生產者吞吐量的上限)。
正如我們預期的那樣,結果基與只有生產者的情況相同 – 消費者相當便宜。
訊息大小的影響/
之前報告的是100位元組的小訊息。較小的訊息是訊息系統更難的問題,因為它們會放大系統記錄的開銷。改變記錄大小,在按照條數/秒和MB /秒中繪製吞吐量來證明。
正如預期,這個圖表顯示由於資料變大,我們每秒可以傳送的記錄的原始記錄條數減少。但是,如果在MB /秒圖中,隨著訊息變大,實際使用者資料的總位元組吞吐量增加:
使用10個位元組的訊息,實際上被CPU來限制,因為是獲取鎖和傳送訊息入隊操作,不能最大限度地發揮網路效能。然而,從100位元組開始,網路開始飽和(儘管MB / sec持續增加,因為固定大小的位元組與傳送總位元組佔比的越來越小)。
端到端延遲
2ms(中位數)
3毫秒(99百分位數)
14毫秒(99.9百分位數)
關於吞吐量,我們已經談到了很多,但是什麼是訊息傳遞的延遲?
也就是說,我們傳送給消費者的訊息需要多長時間?
對於這個測試,我們將建立生產者和消費者,並針對生產者向kafka叢集傳送訊息需要多長時間,被消費者接收進行多次計時。
注意,Kafka只有所有同步副本確認訊息時,才向消費者發出訊息。無論是使用同步還是非同步複製,這個測試將給出相同的結果。因為該設定隻影響生產者的確認。
重複測試
如果你想在自己的機器上嘗試這些基準測試,完全沒問題。正如我所說,我大多隻是使用我們與Kafka一起提供的預裝效能測試工具,並且主要使用伺服器和客戶端的預設配置。您也可以在此處檢視有關配置和命令的更多詳細資訊https://gist.github.com/jkreps/c7ddb4041ef62a900e6c。
相關文章
- UNIX平臺廉價雙機容錯方案(轉)
- Go 語言基準測試入門Go
- hadoop基準測試_Hadoop TeraSort基準測試Hadoop
- 廉價平替esphome水浸 雨水感測器diy
- MySQL基準測試MySql
- TGI 基準測試
- python 編寫遊戲測試機器人客戶端 (二)Python遊戲機器人客戶端
- VMmark 4.0.1 - 虛擬化平臺基準測試
- Java JSON解析器效能基準測試JavaJSON
- UNIX平臺廉價雙機容錯方案完全解決措施(轉)
- 測試基準資料的準備
- MYSQL 效能測試方法 - 基準測試(benchmarking)MySql
- MySQL學習 - 基準測試MySql
- 固態硬碟基準測試硬碟
- TPCC-MySQL基準測試MySql
- 【MYSQL 基準測試結果】MySql
- MySQL基準測試工具sysbenchMySql
- 《Redis官方教程》-基準測試Redis
- 【Mysql】sysbench基準測試工具MySql
- [轉帖]sysbench基準測試
- JMH- benchmark基準測試
- 每秒 50 萬行——MySQL 寫入壓測併發實踐MySql
- C語言上機測試模擬題2C語言
- 寫 Laravel 測試程式碼 (二)Laravel
- postgresql:pgbench基準效能測試SQL
- hadoop-2.6.0基準測試Hadoop
- 【工具】基準測試工具之sysbench
- ubuntu 快速測試 cpu 基準水平Ubuntu
- Kafka如何實現每秒上百萬的超高併發寫入?掌握好面試給你打滿分!Kafka面試
- 每秒570000的寫入,MySQL如何實現?MySql
- MySQL 每秒 570000 的寫入,如何實現?MySql
- 測試平臺開發(二) 高逼格登入頁面
- 日媒披露:為什麼廉價智慧手機如此高價效比?
- 自己上手寫效能測試工具(二)
- 技術基礎 | Apache Cassandra 4.0基準測試Apache
- 基於websocket單臺機器支援百萬連線分散式聊天(IM)系統Web分散式
- 資料庫基準測試工具 sysbench資料庫
- 公有云RDS-MySQL基準測試MySql