Kafka高吞吐量的原因


Kafka每秒可以處理一百萬條以上消息,吞吐量達到每秒百萬級。那么Kafka為什么那么高的吞吐量呢?

  簡單來說有以下幾點原因:

 

  1)、順序讀寫

    Kafka的消息是不斷追加到文件末尾的,這個特性使Kafka可以充分利用磁盤的順序讀寫性能。順序讀寫不需要磁盤磁頭的尋道時間,避免了隨機磁盤尋址的浪費,只需很少的扇區旋轉時間,所以速度遠快於隨機讀寫。

    Kafka中每個分區是一個有序的,不可變的消息序列,新的消息不斷追加到Partition的末尾,在Kafka中Partition只是一個邏輯概念,Kafka將Partition划分為多個Segment,每個Segment對應一個物理文件,Kafka對segment文件追加寫,這就是順序讀寫。

 

  2)、零拷貝

    在Linux Kernel2.2之后出現了一種叫做“零拷貝(zero-copy)”系統調用機制,就是跳過“用戶緩沖區”的拷貝,建立一個磁盤空間和內存的直接映射,數據不再復制到“用戶緩沖區”。

    Kafka 使用到了 mmap+write(持久化數據) 和 sendfile(發送數據) 的方式來實現零拷貝。分別對應 Java 的 MappedByteBuffer 和 FileChannel.transferTo。

    參考博客:什么是零拷貝

 

  3)、分區並發

    kafka中的topic中的內容可以分在多個分區(partition)存儲,每個partition又分為多個段segment,所以每次操作都是針對一小部分做操作,很輕便,並且增加並行操作的能力

 

  4)、批量發送

    Kafka允許進行批量發送消息,Productor發送消息的時候,可以將消息緩存在本地,等到了固定條件發送到kafka,可減少IO延遲

    (1):等消息條數到固定條數

    (2):一段時間發送一次

 

  5)、數據壓縮

    Kafka還支持對消息集合進行壓縮,Producer可以通過GZIP或Snappy格式對消息集合進行壓縮,壓縮的好處就是減少傳輸的數據量,減輕對網絡傳輸的壓力。

    批量發送和數據壓縮一起使用,單條做數據壓縮的話,效果不太明顯。消息發送時默認不會壓縮,可使用compression.type來指定壓縮方式,可選的值為snappy、gzip和lz4

 

  更多參考:https://mp.weixin.qq.com/s/iJJvgmwob9Ci6zqYGwpKtw

 

END.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM