如果我使用Avro进行压缩,那么在Kafka中启用主题压缩是否有意义?

时间:2015-09-07 20:50:51

标签: compression apache-kafka avro

在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

1 个答案:

答案 0 :(得分:2)

虽然KafkaAvroSerializetion允许您使用Avro,但在执行此操作时您实际上无法使用avro.codec。

为什么呢?因为Avro的DataFileWriter使用了avro.codec,而KafkaAvroSerialization中没有使用它(它直接使用DatumWriter来生成byte []记录而不是文件)。

因此,您只能获得非压缩记录,而应该在生产者中设置压缩编解码器。这也意味着生产者有机会压缩包含多条消息的缓冲区,从而提高压缩效率。