Kafka是如何?高吞吐率的

來源:互聯網
上載者:User

標籤:傳輸   b/s   記憶體   jit   zip   origin   tle   緩衝   http   

Kafka是如何?高吞吐率的原創 2016-02-27 杜亦舒 效能與架構

Kafka是分布式訊息系統,需要處理海量的訊息,Kafka的設計是把所有的訊息都寫入速度低容量大的硬碟,以此來換取更強的儲存能力,但實際上,使用硬碟並沒有帶來過多的效能損失

kafka主要使用了以下幾個方式實現了超高的吞吐率

順序讀寫

 

kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁碟的順序讀寫效能

順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫

Kafka官方給出了測試資料(Raid-5,7200rpm):

順序 I/O: 600MB/s

隨機 I/O: 100KB/s

零拷貝


先簡單瞭解下檔案系統的操作流程,例如一個程式要把檔案內容發送到網路

這個程式是工作在使用者空間,檔案和網路socket屬於硬體資源,兩者之間有一個核心空間

在作業系統內部,整個過程為:



在Linux kernel2.2 之後出現了一種叫做"零拷貝(zero-copy)"系統調用機制,就是跳過“使用者緩衝區”的拷貝,建立一個磁碟空間和記憶體的直接映射,資料不再複製到“使用者態緩衝區”

系統環境切換減少為2次,可以提升一倍的效能



檔案分段

 

kafka的隊列topic被分為了多個區partition,每個partition又分為多個段segment,所以一個隊列中的訊息實際上是儲存在N多個片段檔案中



通過分段的方式,每次檔案操作都是對一個小檔案的操作,非常輕便,同時也增加了平行處理能力


批量發送


Kafka允許進行批量發送訊息,先將訊息緩衝在記憶體中,然後一次請求批量發送出去

比如可以指定緩衝的訊息達到某個量的時候就發出去,或者緩衝了固定的時間後就發送出去

如100條訊息就發送,或者每5秒發送一次

這種策略將大大減少服務端的I/O次數

資料壓縮

 

Kafka還支援對訊息集合進行壓縮,Producer可以通過GZIP或Snappy格式對訊息集合進行壓縮

壓縮的好處就是減少傳輸的資料量,減輕對網路傳輸的壓力

Producer壓縮之後,在Consumer需進行解壓,雖然增加了CPU的工作,但在對大資料處理上,瓶頸在網路上而不是CPU,所以這個成本很值得。

 

 

 

Kafka是如何?高吞吐率的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.