2017-03-20 48 views
2

當我向卡夫卡主題發送消息時,可能會收到一封比其他消息大得多的消息。卡夫卡壓縮:如何在單個消息級別進行壓縮

所以需要在單個消息級別進行壓縮。 作爲每https://cwiki.apache.org/confluence/display/KAFKA/Compression

一系列消息可以被壓縮並表示爲一個壓縮 消息。

另外按照這裏給出 https://github.com/apache/kafka/blob/0.10.1/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java 爲屬性compression.type的描述中,

壓縮是數據的完全分批的,所以配料 的功效也將影響壓縮比(更多配料意味着更好的壓縮)。

我應該把批量大小作爲一個/禁用批處理,使每個消息級別的壓縮?

+0

爲什麼壓縮批次不可接受? – ftr

+0

我不是這樣說的。我的意圖是,如果一條消息非常大並且啓用了批處理,它是否會壓縮併發送消息/等待下一條消息以完成批處理常量? –

+0

@AnilKumar,你得到了這個問題的答案,現在面臨同樣的問題,每條消息都如此之大,我想壓縮,每條消息都發送出去,可能嗎? – Bravo

回答

0

壓縮與批量生產的問題是否正交。雖然,如文檔中所述:

更配料意味着更好的壓縮

壓縮可以在主題層次(https://kafka.apache.org/documentation/#topicconfigs)或生產者配置(https://kafka.apache.org/documentation/#producerconfigs)的一部分被設置。此外,同一主題中的不同消息可以使用不同類型進行壓縮,因爲壓縮類型是記錄元數據的一部分(https://kafka.apache.org/documentation/#recordbatch),並且它對消費者來說是無縫的。

但是,如果您需要選擇性壓縮不同的消息,則不能使用相同的生產者來完成,因爲生產者配置是靜態的。無論選擇何種動機,您都可以創建兩個生產者實例(一個支持壓縮,一個不壓縮),並根據消息內容決定使用哪個生產者來發送它。