部落格369 kafka的零拷貝

2021-10-24 05:57:53 字數 1260 閱讀 5993

內容:記錄kafka快的其中乙個原因:零拷貝、

不使用零拷貝技術時:乙個程序讀取磁碟內容並傳送出去的過程如下

1、作業系統從磁碟讀取資料到核心空間的 pagecache

2、應用程式讀取核心空間的資料到使用者空間的緩衝區

3、應用程式將資料(使用者空間的緩衝區)寫回核心空間到套接字緩衝區(核心空間)

4、作業系統將資料從套接字緩衝區(核心空間)複製到通過網路傳送的網絡卡緩衝區

實際呼叫函式內容是

1:呼叫read函式,檔案資料copy到核心緩衝區

2:read函式返回,檔案資料從核心緩衝區copy到使用者緩衝區

原始方法顯然是低效的,有四次 copy 操作和兩次系統呼叫。如果使用零拷貝技術就可以減少

不必要的拷貝。

零拷貝技術:

使用sendfile方法,可以允許作業系統將資料從 pagecache 直接傳送到網路,這樣避免重新複製

資料。所以這種優化方式,只需要最後一步的copy操作,將資料複製到網絡卡緩衝區。如下圖

「零拷貝技術」只用將磁碟檔案的資料複製到頁面快取中一次,然後將資料從頁面快取直接傳送到

網路中(傳送給不同的訂閱者時,都可以使用同乙個頁面快取),避免了重複複製操作。

效能提公升:

如果有100個消費者:

1、不使用零拷貝技術,資料複製次數為4

*100

=400次

2、使用「零拷貝技術」只需要1

+100

=101次,其中一次為從磁碟複製到頁面快取,100次表示100個

消費者各自讀取一次頁面快取。

適用場景:不是所有的都可以使用零拷貝

讀取磁碟檔案後,不需要做其他處理,直接用網路傳送出去。如果讀取磁碟的資料需要用程式進一步

處理的話,必須要經過第二次和第三次資料copy,讓應用程式在記憶體緩衝區處理。

從kafka說起零拷貝機制的運用

參考文章 kafka的零拷貝技術 kafka高吞吐量的原因 1 磁碟順序寫 磁碟的順序io速度遠大於固態硬碟隨機寫操作 2 訊息壓縮 資料壓縮減少網路傳輸 3 分批傳送 kafka允許批量傳送訊息 4 分割槽 多分割槽,並行消費 5 零拷貝機制 今天主要講講零拷貝機制與在kafka中的應用 傳統的檔...

網絡卡的零拷貝理解

jack 最近聽說了網路處理的 零拷貝 技術,覺得非常神奇,在網上查閱了很多資料。不過,並不是太明白 知其然,而不知其所以然。你能通俗地解釋一下嗎?我 這是乙個相對比較複雜的話題,說起來話就多了。本質上來說,其實就是80386的分頁管理變異而已。jack 分頁管理?這個跨度有點大,穿越了。我 你覺得...

網絡卡的零拷貝理解

jack 最近聽說了網路處理的 零拷貝 技術,覺得非常神奇,在網上查閱了很多資料。不過,並不是太明白 知其然,而不知其所以然。你能通俗地解釋一下嗎?我 這是乙個相對比較複雜的話題,說起來話就多了。本質上來說,其實就是80386的分頁管理變異而已。jack 分頁管理?這個跨度有點大,穿越了。我 你覺得...