kafa 吞吐量高的緣由緩存
kafka的消息是不斷追加到文件中的,這個特性使kafka能夠充分利用磁盤的順序讀寫性能網絡
順序讀寫不須要硬盤磁頭的尋道時間,只需不多的扇區旋轉時間,因此速度遠快於隨機讀寫併發
在Linux kernel2.2 以後出現了一種叫作"零拷貝(zero-copy)"系統調用機制,就是跳過「用戶緩衝區」的拷貝,創建一個磁盤空間和內存的直接映射,數據再也不復制到「用戶態緩衝區」 app
kafka中的topic中的內容能夠被分爲多分partition存在,每一個partition又分爲多個段segment,因此每次操做都是針對一小部分作操做,很輕便,而且增長並行操做
的能力 性能
kafka容許進行批量發送消息,producter發送消息的時候,能夠將消息緩存在本地,等到了固定條件發送到kafka.net
Kafka還支持對消息集合進行壓縮,Producer能夠經過GZIP或Snappy格式對消息集合進行壓縮 壓縮的好處就是減小傳輸的數據量,減輕對網絡傳輸的壓力code
批量發送
和數據壓縮
一塊兒使用,單條作數據壓縮的話,效果不明顯一個topic只能在一臺broker上面,可以存儲的信息體就會受到單機的限制
。分割成多個partition的話,每一個partition能夠分佈在不一樣的broker上面,那麼一個topic上面的內容能夠被存儲到不少臺機器上面,實現了topic的橫向拓展
。parition是文件夾,segment是文件夾裏面的文件(一個數據文件+一個索引文件)cdn
若是不劃分segment的話,一個分區partition內部的數據都會被記錄到同一個文件,那麼對應已通過期的數據,刪除就會變得很麻煩
。若是一個partition中分紅多個segment的話,只須要對已通過期的segment文件整個刪除就好了
blog