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

If I use compression with Avro does it make sense to enable Topic Compression in Kafka?

在 Kafka 中,您可以在 Producer 上设置属性以压缩键和值。

compression.codec This parameter allows you to specify the compression codec for all data generated by this producer. Valid values are "none", "gzip" and "snappy".

http://kafka.apache.org/documentation.html#producerconfigs

使用 Confluent 平台时,我可以使用 KafkaAvroSerialization 序列化程序。如果我定义 avro.codec 使用 Kafka 的压缩有什么意义,反之亦然?

avro.codec the name of the compression codec used to compress blocks, as a string. Implementations are required to support the following codecs: "null" and "deflate". If codec is absent, it is assumed to be "null". The codecs are described with more detail below.

https://avro.apache.org/docs/1.7.7/spec.html#Object+Container+Files

虽然 KafkaAvroSerializetion 允许您使用 Avro,但实际上您不能在这样做时使用 avro.codec。

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

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