日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kafka是如何实现高吞吐率的

發(fā)布時間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kafka是如何实现高吞吐率的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉載:http://aoyouzi.iteye.com/blog/2322673

Kafka是分布式消息系統(tǒng),需要處理海量的消息,Kafka的設計是把所有的消息都寫入速度低容量大的硬盤,以此來換取更強的存儲能力,但實際上,使用硬盤并沒有帶來過多的性能損失

?

kafka主要使用了以下幾個方式實現(xiàn)了超高的吞吐率

?

順序讀寫

?

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

?

順序讀寫不需要硬盤磁頭的尋道時間,只需很少的扇區(qū)旋轉時間,所以速度遠快于隨機讀寫

?

Kafka官方給出了測試數據(Raid-5,7200rpm):

?

順序 I/O: 600MB/s

?

隨機 I/O: 100KB/s

?

零拷貝

先簡單了解下文件系統(tǒng)的操作流程,例如一個程序要把文件內容發(fā)送到網絡

?

這個程序是工作在用戶空間,文件和網絡socket屬于硬件資源,兩者之間有一個內核空間

?

在操作系統(tǒng)內部,整個過程為:

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

?

系統(tǒng)上下文切換減少為2次,可以提升一倍的性能

文件分段

kafka的隊列topic被分為了多個區(qū)partition,每個partition又分為多個段segment,所以一個隊列中的消息實際上是保存在N多個片段文件中

通過分段的方式,每次文件操作都是對一個小文件的操作,非常輕便,同時也增加了并行處理能力

?

批量發(fā)送

Kafka允許進行批量發(fā)送消息,先將消息緩存在內存中,然后一次請求批量發(fā)送出去

?

比如可以指定緩存的消息達到某個量的時候就發(fā)出去,或者緩存了固定的時間后就發(fā)送出去

?

如100條消息就發(fā)送,或者每5秒發(fā)送一次

?

這種策略將大大減少服務端的I/O次數

?

數據壓縮

Kafka還支持對消息集合進行壓縮,Producer可以通過GZIP或Snappy格式對消息集合進行壓縮

?

壓縮的好處就是減少傳輸的數據量,減輕對網絡傳輸的壓力

?

Producer壓縮之后,在Consumer需進行解壓,雖然增加了CPU的工作,但在對大數據處理上,瓶頸在網絡上而不是CPU,所以這個成本很值得

總結

以上是生活随笔為你收集整理的Kafka是如何实现高吞吐率的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。