gpt4 book ai didi

avro - AVRO的二进制编码会压缩数据吗?

转载 作者:行者123 更新时间:2023-12-04 00:21:25 53 4
gpt4 key购买 nike

在我们的一个项目中,我们使用带有AVRO的Kafka在跨应用程序之间传输数据。数据被添加到AVRO对象,并且该对象被二进制编码以写入Kafka。我们使用二进制编码,因为与其他格式相比,二进制编码通常被认为是一种最小的表示形式。

数据通常是JSON字符串,当保存在文件中时,它会使用多达10 Mb的磁盘。但是,在压缩文件(.zip)时,它仅使用几个KB。我们担心将这些数据存储在Kafka中,因此在写入Kafka主题之前尝试进行压缩。

当测量二进制编码消息的长度(即字节数组的长度)时,它与数据字符串的长度成比例。因此,我假设二进制编码不会减小任何大小。

有人可以告诉我二进制编码是否压缩数据吗?如果没有,如何应用压缩?

谢谢!

最佳答案

二进制编码是否可以压缩数据?


是和否,这取决于您的数据。

根据avro binary encoding的说法,是的,它只为每个.avro文件存储一次架构,而不管该文件中有多少数据,因此节省了一些空间,而无需多次存储JSON的键名。而且avro序列化通过存储int和长时间利用variable-length zig-zag编码(仅适用于较小的值)来进行位压缩。对于其他情况,avro不会“压缩”数据。

不,在某些极端情况下,avro序列化数据可能会比原始数据大。例如。一个.avro文件和一个Record文件,其中只有一个字符串字段。架构开销可能会导致不需要存储键名而导致的节省。


如果没有,如何应用压缩?


根据avro codecs,avro具有内置的压缩​​编解码器和可选的压缩编解码器。编写对象容器文件时只需添加一行:

DataFileWriter.setCodec(CodecFactory.deflateCodec(6)); // using deflate

要么

DataFileWriter.setCodec(CodecFactory.snappyCodec()); // using snappy codec

要使用snappy,您需要将snappy-java库包含到依赖项中。

关于avro - AVRO的二进制编码会压缩数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711256/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com