您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關基于磁盤的Kafka為什么這么快,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
零拷貝
這里主要講的是Kafka利用linux操作系統的 "零拷貝(zero-copy)" 機制在消費端做的優化。首先來了解下數據從文件發送到socket網絡連接中的常規傳輸路徑:
操作系統從磁盤讀取數據到內核空間(kernel space)的Page Cache
應用程序讀取Page Cache的數據到用戶空間(user space)的緩沖區
應用程序將用戶空間緩沖區的數據寫回內核空間到socket緩沖區(socket buffer)
操作系統將數據從socket緩沖區復制到網絡發送的NIC緩沖區
這個過程包含4次copy操作和2次系統上下文切換,性能其實非常低效。linux操作系統 "零拷貝" 機制使用了sendfile方法,允許操作系統將數據從Page Cache 直接發送到網絡,只需要最后一步的copy操作將數據復制到 NIC 緩沖區,這樣避免重新復制數據。示意圖如下:
通過這種 "零拷貝" 的機制,Page Cache 結合 sendfile 方法,Kafka消費端的性能也大幅提升。這也是為什么有時候消費端在不斷消費數據時,我們并沒有看到磁盤io比較高,此刻正是操作系統緩存在提供數據。
關于基于磁盤的Kafka為什么這么快就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。