Format Atlas

对比

Avro 与 JSON

Apache Avro 是基于模式的数据序列化系统,提供紧凑的二进制编码和包含模式的对象容器文件。JSON 是便于阅读的文本交换格式;Avro 也定义了 JSON 编码。

应该选择哪种格式?

需要由模式管理的紧凑记录以及写入模式与读取模式解析时,可考虑 Avro。若更看重文本检查和广泛的应用互操作性,可选 JSON。

适用于 Avro

按照定义好的模式交换记录

  • 跟踪模式版本的事件和数据管道

适用于 JSON

Web API、配置文件和数据交换

  • 传递结构化数据

基本信息

项目AvroJSON
扩展名.avro.json
MIME 类型application/avroapplication/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 编码以及容器或消息封装。

了解详情

参考资料与规范