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次數
資料壓縮
壓縮的好處就是減少傳輸的資料量,減輕對網路傳輸的壓力
producer壓縮之後,在consumer需進行解壓,雖然增加了cpu的工作,但在對大資料處理上,瓶頸在網路上而不是cpu,所以這個成本很值得
Kafka 高吞吐率的實現
kafka是分布式訊息系統,需要處理海量的訊息,kafka的設計是把所有的訊息都寫入速度低容量大的硬碟,以此來換取更強的儲存能力,但實際上,使用硬碟並沒有帶來過多的效能損失。kafka主要使用了以下幾個方式實現了超高的吞吐率 順序讀寫 kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充...
Kafka (十)Kafka 如何實現高吞吐量
kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁碟的順序讀寫效能 順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫 生產者負責寫入資料,kafka會將訊息持久化到磁碟,保證不會丟失資料,kafka採用了倆個技術提高寫入的速度。1.順序寫入 在大...
Kafka的高吞吐
kafka誕生於linkin公司。當時linkin需要對使用者和 上產生的活動資料進行處理,什麼是活動資料呢?比如頁面訪問量 使用者行為 搜尋情況等,對這些資料的分析將被應用於廣播 排序 個性化 推薦 運營監控等。這類資料有個特點,需要實時處理,最好當下使用者的一些行為資料能馬上被後台感知 計算,並...