什么情況適合使用資料壓縮?
資料壓縮不僅能節省存盤空間,還可以用于提升網路傳輸性能,
通過網路傳輸資料,使用資料壓縮前后,處理的時間會有一些差別:
- 壓縮前:傳輸未壓縮資料耗時
- 壓縮后:壓縮耗時+傳輸壓縮資料耗時+解壓耗時
壓縮和解壓縮的操作都是計算密集型操作,非常耗費CPU資源,如果我們的應用處理業務邏輯本身就需要耗費大量的CPU資源,就不太適合再進行壓縮和解壓縮操作,
如果我們的系統瓶頸在于磁盤IO,同時CPU資源又有大量空閑,那么就非常適合在將資料寫入磁盤前先進行壓縮,
資料壓縮的本質是資源的置換,是一個時間換空間,或者說CPU資源置換存盤資源的操作,
需要選擇什么壓縮演算法?
壓縮演算法可以分為有損壓縮和無損壓縮,有損壓縮主要用來壓縮音視頻,它在壓縮之后會丟失訊息,而無損壓縮的資料,在經過壓縮和解壓縮后,資料是沒有變化的,
目前常用的壓縮演算法包括:ZIP、GZIP、SNAPPY、LZ4等,選擇壓縮演算法時,主要考慮資料的壓縮率和壓縮耗時,一般來說,壓縮率越高的演算法,壓縮耗時也越高,如果對性能要求很高,可以選擇壓縮速度快的演算法,比如LZ4,如果需要更高的壓縮比,可以考慮GZIP演算法,
壓縮樣本對壓縮速度和壓縮比的影響也是比較大的,同樣大小的一段數字和一段新聞的文本,即使是使用相同的壓縮演算法,壓縮率和壓縮時間的差異也是比較大的,所以在選擇壓縮演算法之前,可以先嘗試用我們系統中真正使用的資料做一些測驗,這樣可以找到最合適的壓縮演算法,
如何選擇合適的壓縮分段?
大部分壓縮演算法的區別主要在于對資料進行編碼不同,壓縮的流程和壓縮包的結構大致一樣,而在壓縮的程序中,我們需要了解如何選擇合適的壓縮分段大小,
在壓縮時,給定的被壓縮資料必須由確定的長度,或者說是有頭有尾的資料,不能是一個無限的流資料,如果要對流資料進行壓縮,也需要把流資料劃分成多個幀,一幀一幀的分段壓縮,
壓縮演算法在開始壓縮之前,一般都需要對被壓縮資料從頭到尾進行一次掃描,掃描的目的是確定如何對資料進行劃分和編碼,一般的原則是重復次數多、占用空間大的內容,使用盡量短的編碼,這樣壓縮率會更高,
被壓縮的資料長度越大,重碼率會越高,壓縮比也就越高,
分段也不是越大越好,實際上分段大小超過一定長度后,再增加長度對壓縮率的共享就不大了,同時,過大的分段長度,在解壓縮時,會有更多的解壓浪費,
我們需要根據具體的業務場景,選擇合適的壓縮分段,在壓縮率、壓縮速度和解壓浪費之間找到一個合適的平衡,
Kafka如何處理訊息壓縮?
Kafka是否開啟訊息壓縮,是可以進行配置的,它也支持配置使用哪一種壓縮演算法,
在開啟壓縮時,Kafka選擇一批訊息一起壓縮,每一批訊息就是一個壓縮分段,使用者也可以通過引數來控制每批訊息的大小,
Kafka并不需要在服務端對接收到的批訊息進行解壓,而是整批直接存盤,然后將其發送給消費者,由消費者對批訊息進行解壓處理,
不在服務端解壓,就不會耗費服務端的CPU資源,同時傳遞訊息資料時,真用的傳輸帶寬也會小,
在使用Kafka時,如果生產者和消費者的CPU資源不是特別吃緊,開啟壓縮后,可以節省網路帶寬和服務端的存盤空間,提升總體的吞吐量,
作者:李潘 出處:http://wing011203.cnblogs.com/ 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/547551.html
標籤:架構設計
下一篇:TCP和UDP協議的區別