对比
Avro 与 JSON
Apache Avro 是基于模式的数据序列化系统,提供紧凑的二进制编码和包含模式的对象容器文件。JSON 是便于阅读的文本交换格式;Avro 也定义了 JSON 编码。
应该选择哪种格式?
需要由模式管理的紧凑记录以及写入模式与读取模式解析时,可考虑 Avro。若更看重文本检查和广泛的应用互操作性,可选 JSON。
适用于 Avro
按照定义好的模式交换记录
- 跟踪模式版本的事件和数据管道
适用于 JSON
Web API、配置文件和数据交换
- 传递结构化数据
基本信息
| 项目 | Avro | JSON |
|---|---|---|
| 扩展名 | .avro | .json |
| MIME 类型 | application/avro | application/json |
| 常见用途 | 按照定义好的模式交换记录 | Web API、配置文件和数据交换 |
| 打开方式 | 使用支持 Avro 的工具检查模式、字段、类型和记录。 | 可使用文本编辑器、IDE或支持JSON的查看器打开。 |
| 导出或转换 | 转换为 JSON 或 Parquet 时,检查字段名、类型、空值、逻辑类型、记录数和模式兼容性。 | 可使用应用程序或转换工具将其转换为CSV等格式。 |
按用途选择
跟踪模式版本的事件和数据管道
按照定义好的模式交换记录
Avro传递结构化数据
Web API、配置文件和数据交换
JSON关键点 1
Avro 二进制编码遵循模式;对象容器文件保存数据块和模式元数据。JSON 是 RFC 8259 定义的文本,而 Avro 另有独立的 JSON 编码。
进一步了解差异关键点 2
Avro 读取时需要写入模式,并可将其与读取模式解析。JSON 语法不要求数据模式,但应用可以另行定义。
进一步了解差异进一步了解差异
当生产者和消费者共同管理模式且紧凑记录有价值时使用 Avro。需要可检查的文本接口和广泛工具支持时使用 JSON。明确具体编码,并在转换时验证类型与模式行为。
- Avro 按模式编码值;对象容器文件包含数据块和模式元数据。JSON 是文本语法。Avro 并非只有二进制形式,因为它也规定了 JSON 编码。
- Avro 模式解析可按兼容规则关联写入模式和读取模式。JSON 文档无需内嵌模式即可读取,因此验证通常依赖应用契约。
- JSON 数字、null、数组和对象与 Avro union、bytes、时间戳等类型并非一一对应。转换时检查默认值、缺失值、数值精度、字符编码和模式兼容性。
常见问题
Avro 一定是二进制,而 JSON 一定是文本吗?
不是。Avro 常用二进制编码,但也定义了 JSON 编码。应明确实际使用的 Avro 编码以及容器或消息封装。