當前位置:編程學習大全網 - 源碼下載 - kafka性能為什麽好

kafka性能為什麽好

人人皆知kafka性能好,但真正了解原因的人就少了很多。說起來也是悲傷的故事,我的某次面試就涼在此題。那麽從設計的角度看,kafka是如何實現高性能的呢?

Kafka會把消息寫入到硬盤,絕對不會丟失數據。為了優化寫入速度Kafak采用了兩個技術, 順序寫入 MMFile

因為硬盤是機械結構,尋址是最耗時的。所以硬盤最“討厭”隨機I/O,最喜歡順序I/O,Kafka就是使用順序I/O。

每壹個Partition其實都是壹個文件 ,收到消息後Kafka會把數據插入到文件末尾(虛框部分)。

Kafka的數據並 不是實時的寫入硬盤 ,它充分利用了現代操作系統 分頁存儲 來利用內存提高I/O效率。操作系統會選擇適當的時機將數據寫入硬盤。

缺點就是 不可靠 ,寫到mmap中的數據並沒有被真正的寫到硬盤,操作系統會在程序主動調用flush的時候才把數據真正的寫到硬盤。

Kafka提供了壹個參數——producer.type來控制是不是主動flush,如果Kafka寫入到mmap之後就立即flush然後再返回Producer叫 同步 (sync);寫入mmap之後立即返回Producer不調用flush叫 異步 (async)。

cosumer向broker索要消息時,kafka使用 零拷貝(zero-copy) ,建立壹個磁盤空間和內存的直接映射,數據不再復制到“用戶態緩沖區”,直接復制到socket緩沖區

  • 上一篇:大家常說的BT,到底是什麽?
  • 下一篇:電腦頁面被鎖定該怎麽辦
  • copyright 2024編程學習大全網