我們在Kafka中有各種選項可以在其上寫入數據,例如:字符串格式,字節數組。 在Kafka上寫作時,哪些數據文件被認爲是最快的。什麼數據格式將被認爲是最快的寫在卡夫卡?
此外,kafka提供任何實用程序來壓縮整個數據一次,然後寫上它。
還需要考慮,同時消耗相同的消息,我們將解壓縮它,因此讀取數據成本將增加。
我們在Kafka中有各種選項可以在其上寫入數據,例如:字符串格式,字節數組。 在Kafka上寫作時,哪些數據文件被認爲是最快的。什麼數據格式將被認爲是最快的寫在卡夫卡?
此外,kafka提供任何實用程序來壓縮整個數據一次,然後寫上它。
還需要考慮,同時消耗相同的消息,我們將解壓縮它,因此讀取數據成本將增加。
Kafka 0.8.2將數據作爲字節數組串行化到其提交日誌。該org.apache.kafka.common.serialization.Serializer
類具有以下接口:
byte[] serialize(String var1, T var2);
它需要一個字節數組作爲數據將被寫入到該主題卡夫卡要返回。所以org.apache.kafka.common.serialization.StringSerializer
類目前擁有從字符串中提取的字節數組:
public byte[] serialize(String topic, String data) {
try {
return data == null?null:data.getBytes(this.encoding);
所以在性能方面,如果你有那麼二進制數據使用默認的序列中使用Java創建的字符串可以潛在地寫爲一個字節數組昂貴,所有卡夫卡將做的是無論如何將您的字符串轉換爲字節數組。
關於壓縮卡夫卡目前提供了以下壓縮options在生產者開箱:
- compression.codec
- 此參數允許您指定由該所產生的所有數據的壓縮編解碼器製片人。有效值爲「無」, 「gzip」和「snappy」。
請參見下面的卡夫卡共同創造者之一article但總結,GZIP提供了最好的壓縮,但還需要更多的CPU週期。 Snappy是一個很好的折衷方案,可以壓縮數據,並且在很多情況下允許更高的吞吐量。 GZIP更適合跨數據中心複製,因爲它需要更少的帶寬。
所以,你說byte []是最快的寫在文件系統上的kafka?哦是的,我將接收字符串格式的數據,我已經轉換爲字節[],因爲kafka需要。我想要的是希望這個字符串在壓縮/轉換後寫入的磁盤上具有最小的大小,這是kafka允許的。這是我想要獲取更少的時間來消費消息。 – usman
就使用String或byte []作爲磁盤上的最小大小而言,它無關緊要。由於所有數據都以byte []形式寫入,因此即使使用Strings Kafka也會將其串行化爲byte []。要使用最小數量的磁盤使用GZIP,雖然這可能不具有活潑的性能 - 因此,如果在較短的時間內消費這些消息是優先考慮的事情,那麼請使用快捷方式。現在磁盤空間很便宜,所以我會選擇snappys而不是GZIP的高級壓縮。 –
我也會考慮kafka壓縮,但是如果我們手動提交消費者偏移量,可以說我是否有1個主題與1個分區和1個消費者組,那麼尋找性能會不錯。意味着每個分區只有一個消費者實例。現在,除非1消息被消費和提交,否則我無法獲取下一條消息來處理這種情況,消費者的表現將被忽略或應該小心處理。由於與自動提交相比,下一條消息在被處理並準備好提交之後將被提取。 – usman