kafka高吞吐量的緣由

kafa 吞吐量高的緣由緩存

順序讀寫

kafka的消息是不斷追加到文件中的,這個特性使kafka能夠充分利用磁盤的順序讀寫性能網絡

順序讀寫不須要硬盤磁頭的尋道時間,只需不多的扇區旋轉時間,因此速度遠快於隨機讀寫併發

零拷貝

在Linux kernel2.2 以後出現了一種叫作"零拷貝(zero-copy)"系統調用機制,就是跳過「用戶緩衝區」的拷貝,創建一個磁盤空間和內存的直接映射,數據再也不復制到「用戶態緩衝區」 app

173206xip766ntnpziapk2.png

173206tzmk9mxg2q6qry9s.png

分區

kafka中的topic中的內容能夠被分爲多分partition存在,每一個partition又分爲多個段segment,因此每次操做都是針對一小部分作操做,很輕便,而且增長並行操做的能力 性能

topic分區.png

批量發送

kafka容許進行批量發送消息,producter發送消息的時候,能夠將消息緩存在本地,等到了固定條件發送到kafka.net

  1. 等消息條數到固定條數
  2. 一段時間發送一次

數據壓縮

Kafka還支持對消息集合進行壓縮,Producer能夠經過GZIP或Snappy格式對消息集合進行壓縮 壓縮的好處就是減小傳輸的數據量,減輕對網絡傳輸的壓力code

  • 批量發送數據壓縮一塊兒使用,單條作數據壓縮的話,效果不明顯

topic、partition、segment

topic 劃分爲多個partition

  1. 一個topic能夠分割成多個partition,若是不劃分以前,一個topic只能在一臺broker上面,可以存儲的信息體就會受到單機的限制。分割成多個partition的話,每一個partition能夠分佈在不一樣的broker上面,那麼一個topic上面的內容能夠被存儲到不少臺機器上面,實現了topic的橫向拓展
  2. 多個partition的消費能夠併發進行,提交了處理併發能力

partition劃分爲多個segment file

parition是文件夾,segment是文件夾裏面的文件(一個數據文件+一個索引文件)cdn

若是不劃分segment的話,一個分區partition內部的數據都會被記錄到同一個文件,那麼對應已通過期的數據,刪除就會變得很麻煩。若是一個partition中分紅多個segment的話,只須要對已通過期的segment文件整個刪除就好了blog

參考資料

  1. blog.csdn.net/u013256816/…
相關文章
相關標籤/搜索