在Kafka中,您可以在Producer上设置属性以压缩键和值。
compression.codec
此参数允许您为此生产者生成的所有数据指定压缩编解码器。有效值为"无"," gzip"和" snappy"。
http://kafka.apache.org/documentation.html#producerconfigs
使用Confluent平台时,我可以使用KafkaAvroSerialization
序列化程序。如果我定义avro.codec
使用Kafka的压缩是否有任何意义,反之亦然?
avro.codec
用于压缩块的压缩编解码器的名称,作为字符串。需要实现来支持以下编解码器:" null"和"放气"。如果编解码器不存在,则假定为" null"。编解码器在下面有更详细的描述。
https://avro.apache.org/docs/1.7.7/spec.html#Object+Container+Files
答案 0 :(得分:2)
虽然KafkaAvroSerializetion允许您使用Avro,但在执行此操作时您实际上无法使用avro.codec。
为什么呢?因为Avro的DataFileWriter使用了avro.codec,而KafkaAvroSerialization中没有使用它(它直接使用DatumWriter来生成byte []记录而不是文件)。
因此,您只能获得非压缩记录,而应该在生产者中设置压缩编解码器。这也意味着生产者有机会压缩包含多条消息的缓冲区,从而提高压缩效率。