kafka 會為我們保留一定量時間的資料那麼為kafka 選擇乙個合適的壓縮演算法是非常重要的,可以在節約儲存空間的同時又將效率影響到最低。
在 kafka 中,壓縮可能發生在兩個地方:生產者端和 broker 端。
生產者程式中配置 compression.type 引數即表示啟用指定型別的壓縮演算法。比如下面這段程式**展示了如何構建乙個開啟 gzip 的 producer 物件:
properties props = new properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("key.serializer", "org.apache.kafka.common.serialization.stringserializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.stringserializer"
props.put("compression.type", "gzip");
producerproducer = new kafkaproducer<>(props);
有壓縮必有解壓縮!通常來說解壓縮發生在消費者程式中,那麼現在問題來了,consumer 怎麼知道這些訊息是用何種壓縮演算法壓縮的呢?其實答案就在訊息中。kafka 會將啟用了哪種壓縮演算法封裝進訊息集合中,這樣當 consumer 讀取
到訊息集合時,它自然就知道了這些訊息使用的是哪種壓縮演算法。如果用一句話總結一下壓縮和解壓縮:producer 端壓縮、broker 端保持、consumer端解壓縮
。
當然還有broker 也會執行解壓縮,包含上面的情況壓縮格式不一致,也會出現解壓縮。但是還有解壓縮發生在broker不是剛剛說到的壓縮格式不一致的問題。每個壓縮過的訊息集合在 broker 端寫入時都要發生解壓縮操作,目的就是為了對訊息執行各種驗證。我們必須承認這種解壓縮對 broker 端效能是有一定影響的,特別是對 cpu 的使用率而言。
有位小夥伴就在開源社群上面提到了這個問題去掉在broker去掉對訊息的解壓縮驗證,目前看到jira 已經修復了,看來規避了broker端為執行校驗而做的解壓縮操作,**也merge進了2.4版本。
文末給出乙個facebook zstandard 官網提供的乙份壓縮演算法 benchmark 比較結果 僅作選在壓縮演算法上的乙個參考 :
最重要還是要根據實際的集群的頻寬,磁碟,cpu等資源合理選擇
Kafka學習整理五 Consumer配置
property default description group.id 用來唯一標識consumer程序所在組的字串,如果設定同樣的group id,表示這些processes都是屬於同乙個consumer group zookeeper.connect 指定zookeeper的連線的字串,格式...
Kafka學習筆記 Kafka環境搭建
1.將kafka的tar包上傳到測試環境,解壓到 opt software,配置環境變數 kafka home opt software kafka 2.11 1.1.0 path kafka home bin scala home bin path export kafka home export...
kafka 學習(二)單機安裝kafka
參考 解壓後2.3.0才是kafka版本 2.12是kafka依賴的scala版本 kafka 2.12 2.3.0 kafka依賴於zookeeper 需安執行zookeeper,才能執行kafka kafka2.30這個版本內建了zookeeper 在kaka目錄下執行命令 bin window...