kafka高吞吐量之消息壓縮

image.png

背景

保證kafka高吞吐量的另一大利器就是消息壓縮。就像上圖中的壓縮餅乾。程序員

壓縮即空間換時間,經過空間的壓縮帶來速度的提高,即經過少許的cpu消耗來減小磁盤和網絡傳輸的io。算法

消息壓縮模型

消息格式V1編程

image.png

kafka不會直接操做單條消息,而是直接操做一個消息集合。網絡

消息格式V2:學習

image.png

1, 抽取了消息的公共部分放到消息集合中;去掉每條消息的公共部分,減小了整體積。blog

2,消息的CRC校驗由對每一條消息,移動到了對消息集合進行校驗,減小了校驗次數,節省了cpu;資源

3, 對單個消息進行壓縮,放到消息的body字段 pk 對消息集合整個進行壓縮 更好的壓縮效果;kafka

壓縮過程模型io

file

壓縮算法比較

如何衡量一個壓縮算法的好壞。學習資料

file

常見的壓縮算法對比:

Zstandard 算法(簡寫爲 zstd)。它是 Facebook 開源的一個壓縮算法,可以提供超高的壓縮比

file

啓用壓縮場景

若是cpu負載比較高,不適合啓用壓縮;

若是帶寬不足,而cpu負載不高,最適合啓用壓縮,節約大量的帶寬;

儘可能避免消息格式不一致帶來的解壓縮消耗。

小結

壓縮的目的是較少空間佔用,帶來傳輸速度的提高,可是須要消耗必定的cpu ;

是一種提升kafka消息吞吐量的有效辦法。

本節回顧了新版的kafka是如何對消息進行壓縮的,壓縮和解壓縮的流程是怎樣的,

而後對比了常見的4種壓縮算法,根據具體的使用場景來選擇是否啓用壓縮,以及選擇合適的壓縮算法。

而後給出了壓縮的配置參數,在producer和borker端均可以使用compression.type來設置。

原創不易,點贊關注支持一下吧!轉載請註明出處,讓咱們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各類資源,關注公衆號‘李福春持續輸出’,發送'學習資料'分享給你!

相關文章
相關標籤/搜索