kafka有個很重要的特性,高速的傳送和接收訊息,超高的吞吐量。這裡來討論一下kafka超高的吞吐量原理:1. 寫:
頁面快取,順序寫入磁碟。
producer ------生產訊息----->broker
會先將資料先寫入到頁面快取(page cache)(基於mmap) ----刷盤---》 順序寫入到磁碟(順序寫入比隨機的ssd更快)
broker基於mmap技術,即記憶體對映檔案,將訊息先寫入到作業系統的頁快取中
2. 讀:零拷貝技術
dma將資料載入到核心緩衝區, ----sendfile 將核心緩衝區的資料直接傳送。
3. partition。乙個topic可以有多個partition,並行處理資料。
4. 批量處理,資料壓縮。producer ----------生產訊息-------->broker
可以設定一定的訊息數量 或者時間間隔 再傳送資料。減少網路互動。
頻寬壓力大可以對資料進行壓縮。
詳細解析 讀 和 寫操作。
零拷貝並不是說沒有一次拷貝,而是減少拷貝的次數。
在消費者模型中,kafka讀取訊息傳送訊息:
傳統的io方式(4次 copy過程):
1.將磁碟------》作業系統核心緩衝區。
4.socket buffer -------》網絡卡(由網絡卡進行傳送)。
kafka io讀取模型:
1.應用指定需要傳輸的檔案控制代碼和呼叫sendfile (系統呼叫)
2.作業系統在核心讀取磁碟檔案拷貝到頁快取。 (copy)
3.將頁快取拷貝到網絡卡。 (copy)
簡稱mmap,簡單描述其作用就是:將磁碟檔案對映到記憶體, 使用者通過修改記憶體就能修改磁碟檔案。
mmap之所以能有效提高kafka的吞吐量,是因為其在進行log檔案讀取的時候直接將log檔案讀入使用者態進行快取,繞過了核心態的page cache,避免了核心態和使用者態的切換過程
參考:kafka dma,mmap,零拷 kafka高吞吐量的原因
kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁碟的順序讀寫效能 順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫 生產者負責寫入資料,kafka會將訊息持久化到磁碟,保證不會丟失資料,kafka採用了倆個技術提高寫入的速度。1.順序寫入 在大...
kafka吞吐量高的原因
1 順序讀寫 基於磁碟的隨機讀寫確實很慢,但磁碟的順序讀寫效能卻很高,一些情況下磁碟順序讀寫效能甚至要高於記憶體隨機讀寫。kafka的message是不斷追加到本地磁碟檔案末尾的,而不是隨機的寫入,這使得kafka寫入吞吐量得到了顯著提公升 2 page cache 為了優化讀寫效能,kafka利用...
Kafka (十)Kafka 如何實現高吞吐量
kafka的訊息是不斷追加到檔案中的,這個特性使kafka可以充分利用磁碟的順序讀寫效能 順序讀寫不需要硬碟磁頭的尋道時間,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫 生產者負責寫入資料,kafka會將訊息持久化到磁碟,保證不會丟失資料,kafka採用了倆個技術提高寫入的速度。1.順序寫入 在大...