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

 汉子r_843 发布于 2022-12-13 17:36

在我们的一个项目中,我们使用Kafka和AVRO在应用程序之间传输数据.数据被添加到AVRO对象,对象被二进制编码以写入Kafka.我们使用二进制编码,因为与其他格式相比,它通常被称为最小表示.

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

当测量二进制编码消息的长度(即字节数组的长度)时,它与数据串的长度成比例.所以我假设二进制编码没有减少任何大小.

有人能告诉我二进制编码压缩数据吗?如果没有,我该如何应用压缩?

谢谢!

1 个回答
  • 如果二进制编码压缩数据?

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

    根据avro二进制编码,是的,因为它只为每个.avro文件存储一次模式,无论该文件中有多少数据,因此节省了一些空间,无需多次存储JSON的密钥名称.并且avro序列化通过存储int和长期利用可变长度 之字形编码进行了一点压缩(仅适用于较小的值).对于其他人,avro不会"压缩"数据.

    没有在某些极端情况下的Avro序列化的数据可能会比原始数据更大.例如.一个.avro文件,其中一个Record只有一个字符串字段.架构开销可以避免保存而不需要存储密钥名称.

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

    根据avro编解码器,avro内置了压缩编解码器和可选编解码器.只需在编写对象容器文件时添加一行:

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

    要么

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

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

    2022-12-13 17:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有