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

Sea*_*ver 4 compression avro apache-kafka

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

compression.codec该参数允许您指定该生产者生成的所有数据的压缩编解码器。有效值为“none”、“gzip”和“snappy”。

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

使用 Confluence 平台时,我可以使用KafkaAvroSerialization序列化器。如果我定义avro.codec使用 Kafka 的压缩是否有任何意义,反之亦然?

avro.codec用于压缩块的压缩编解码器的名称,作为字符串。实现需要支持以下编解码器:“null”和“deflate”。如果编解码器不存在,则假定为“null”。下面更详细地描述编解码器。

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

Gwe*_*ira 5

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

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

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