在kafka中,我们有各种各样的选项在上面写数据,例如:字符串格式、字节数组。在写Kafka的时候,什么样的数据被认为是最快的。此外,Kafka还提供了任何实用工具,可以将整个数据压缩一次,然后在上面进行写入。还需要考虑在消耗相同的消息时我们将对其进行反压缩,因此读取数据的成本将增加。
3bygqnnd1#
kafka0.8.2将数据序列化为字节数组,并将其提交到其提交日志中。这个 org.apache.kafka.common.serialization.Serializer 类具有以下接口:
org.apache.kafka.common.serialization.Serializer
byte[] serialize(String var1, T var2);
它要求返回一个字节数组,作为要写入kafka主题的数据。所以 org.apache.kafka.common.serialization.StringSerializer 类当前必须从字符串中提取字节数组:
org.apache.kafka.common.serialization.StringSerializer
public byte[] serialize(String topic, String data) { try { return data == null?null:data.getBytes(this.encoding);
因此在性能方面,如果您有二进制数据,那么使用默认序列化程序将其写入字节数组,因为在java中创建字符串可能会非常昂贵,kafka所要做的就是将字符串转换为字节数组。关于压缩Kafka目前提供以下压缩选项对生产者的开箱即用:压缩.codec此参数允许您为此生产者生成的所有数据指定压缩编解码器。有效值为“none”、“gzip”和“snappy”。请参阅Kafka的一位合著者的以下文章,但总结一下,gzip提供了最好的压缩,但也需要更多的cpu周期。snappy是一个很好的折衷方案,它可以压缩数据,并且在许多情况下允许更高的吞吐量。gzip更适合跨数据中心复制,因为它需要较少的带宽。
1条答案
按热度按时间3bygqnnd1#
kafka0.8.2将数据序列化为字节数组,并将其提交到其提交日志中。这个
org.apache.kafka.common.serialization.Serializer
类具有以下接口:它要求返回一个字节数组,作为要写入kafka主题的数据。所以
org.apache.kafka.common.serialization.StringSerializer
类当前必须从字符串中提取字节数组:因此在性能方面,如果您有二进制数据,那么使用默认序列化程序将其写入字节数组,因为在java中创建字符串可能会非常昂贵,kafka所要做的就是将字符串转换为字节数组。
关于压缩Kafka目前提供以下压缩选项对生产者的开箱即用:
压缩.codec
此参数允许您为此生产者生成的所有数据指定压缩编解码器。有效值为“none”、“gzip”和“snappy”。
请参阅Kafka的一位合著者的以下文章,但总结一下,gzip提供了最好的压缩,但也需要更多的cpu周期。snappy是一个很好的折衷方案,它可以压缩数据,并且在许多情况下允许更高的吞吐量。gzip更适合跨数据中心复制,因为它需要较少的带宽。