1 資料壓縮意義
Kafka使用資料壓縮,最高可提升約幾十倍吞吐量。資料壓縮不僅可節省存儲空間,還可用于提升網絡傳輸性能。這種使用壓縮提升系統性能的方法,不僅在MQ使用,日常開發也可。比如傳輸大量資料或要在磁盤、資料庫中存儲較大資料,這些情況下,都可考慮使用資料壓縮提升性能,還能節省網絡帶寬和存儲空間。
2 資料壓縮适用場景
程序間通過網絡傳輸資料是不是需要壓縮?
- 不壓縮直接傳輸耗時: 傳輸未壓縮資料的耗時
-
使用資料壓縮耗時: 壓縮耗時 + 傳輸壓縮資料耗時 + 解壓耗時
壓縮快還是不壓縮快呢?
不好說。影響因素多,比如資料壓縮率、網絡帶寬、收發兩端伺服器的繁忙度。
壓縮和解壓的操作都是計算密集型操作。如果你的應用處理業務邏輯就需耗費大量CPU資源,就不太适合再壓縮解壓。
若系統瓶頸是磁盤IO性能,CPU資源又閑,這就非常适合在把資料寫入磁盤前先壓縮。
但若系統讀寫比嚴重失調,要考慮每讀次資料就解壓次是不是劃算。
壓縮的本質是資源置換,即時間換空間或CPU資源換存儲資源。
就像木桶理論,每個系統都有性能瓶頸資源,可能磁盤IO、網絡帶寬、CPU。
若使用壓縮,能用長闆來換些短闆,那總體上就能提升性能,這就劃算。
若用壓縮後,短闆更短,就不劃算。
隻有通過性能測試,确認資料壓縮可提升系統性能,就需選擇合适壓縮算法了。
3 壓縮算法抉擇
壓縮算法可以分為
-
有損壓縮
主要用來壓縮音視訊,它壓縮之後會丢失資訊
-
無損壓縮
這讨論都是無損壓縮,即資料經過壓縮和解壓過程後,與壓縮前相比100%相同。
資料為什麼可被壓縮呢?各種各樣壓縮算法又怎麼壓縮資料的?
舉個極端例子:
00000000000000000000
人肉壓縮下:
20個0
20個字元就被壓縮成4字元,且可無損還原。
常用壓縮算法:ZIP,GZIP,SNAPPY,LZ4,XZ。
選擇時考慮資料的壓縮率和壓縮耗時。一般壓縮率越高,壓縮耗時越高。
- 若要高性能,可選擇壓縮速度快的LZ4
- 要更高壓縮比,考慮GZIP或壓縮率更高的XZ
壓縮樣本對壓縮速度和壓縮比的影響也較大,同樣大小的一段數字和一段新聞的文本,即使用相同壓縮算法,壓縮率和壓縮時間差異也較大。
是以,有時在選擇壓縮算法前,用系統樣例業務資料做個測試,幫你找到最合适壓縮算法。
如果感興趣,可學習最經典的壓縮算法:哈夫曼編碼。