kafka是一個高吞吐速度的消息中間件,可以部署在廉價的主機上。
速度快的原因有兩個:
1.從寫數據方面:寫入的數據按順序寫入到磁盤;memory mapped files
磁盤讀寫的快慢取決于你怎么使用它,寫入的時候可以選擇順序寫入和隨機寫入,kafka選擇的時順序寫入機制,該機制的讀寫速度和內存的速度基本持平
使用順序寫入的好處:
1.磁盤順序寫入的速度比內存隨機速度快
2.在內存中操作時,jvm的堆中數據量大,GC時的效率低,使用磁盤可以避免這個問題
3.順序寫入系統冷啟動后,磁盤緩存依然可以使用。
memory mapped? files
kafka寫入數據時不是實時寫入磁盤的,它利用了現代操作系統分頁存儲來利用內存提高I/O效率,先寫在內存中,在一定的時間flush到磁盤中。
Kafka提供了一個參數——producer.type來控制是不是主動flush,如果Kafka寫入到mmap之后就立即flush然后再返回Producer叫 同步 (sync);寫入mmap之后立即返回Producer不調用flush叫異步 (async)
memory mapped files(mmap)即內存映射文件,在64位系統中一般可以表示20G的數據文件,它的工作原理使用操作系統的page來實現文件到物理內存的直接映射。映射之后
對物理內存的操作也可以同步到硬盤上。這種方式可以獲取很大的I/O提升,省去了用戶空間到內核空間的開銷(read會把數據先放在內核空間,然后復制到用戶空間的內存中)
2.從讀數據方面
基于sendfile實現zero copy
傳統read/write方式進行網絡文件傳輸的方式,在這個過程當中,文件數據經過四個copy過程
硬盤---內核buf--用戶buf----socket相關緩沖區---協議引擎
sendfile系統調用可以提供一種減少以上多次copy,提升文件傳輸性能的方法。
硬盤---內核buf----socket相關緩存----協議引擎
在內核版本2.4之后,文件描述符結果被改變,sendfile實現了更簡單的方式,再次減少了一次copy操作。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。