当前位置: 首页 > 工具软件 > Apache Avro > 使用案例 >

Apache Avro 文档概况

池阳伯
2023-12-01

文章主题来源于英文源文档 -> Apache Avro™ 1.11.0 文档

Apache Avro™ 1.11.0 Documentation

1. 介绍

Apache Avro™ 是一个数据序列化(data serialization)框架

Avro 提供如下:

  • 丰富的数据结构
  • 一种紧凑、快速的二进制数据格式
  • 一个容器文件,用于存储持久数据
  • 远程过程调用 Remote procedure call (RPC)
  • 与动态语言的简单集成。代码生成不需要读取或写入数据文件,也不需要使用或实现 RPC协议。代码生成作为一种可选的优化,只为静态类型语言实现

2. Schemas(模式)

Avro 依赖于模式。读取 Avro 数据时,写入时使用的模式始终存在。这允许在没有每个值开销的情况下写入每个数据,从而使序列化既快速又小。这也便于使用动态脚本语言,因为数据及其模式是完全自描述的。

当 Avro 数据存储在文件中时,它的模式也随之存储,以便以后任何程序都可以处理文件。如果读取数据的程序需要不同的模式,这很容易解决,因为两种模式都存在。

在 RPC 中使用 Avro 时,客户端和服务器在连接握手中交换模式(这可以优化,使得对于大多数调用,实际上并不传输模式)。由于客户端和服务器都具有对方的完整模式,因此可以轻松解决相同命名字段之间的对应关系,缺少字段,额外字段等.

Avro 模式是用 JSON 定义的。这有助于在已经具有 JSON 库的语言中实现。

3. 与其他框架的比较

Avro 提供类似于 Thrift、Protocol Buffers 等系统的功能。Avro 在以下基本方面与这些系统不同

  • 动态类型:Avro 不需要生成代码。数据总是伴随着一个模式,该模式允许在没有代码生成、静态数据类型等的情况下完全处理该数据。这有助于构建通用数据处理系统和语言。
  • 未标记数据:由于在读取数据时存在模式,因此需要用数据编码的类型信息要少得多,从而导致更小的序列化大小。
  • 没有手动分配的字段 ID:当架构更改时,处理数据时始终存在旧架构和新架构,因此可以使用字段名称象征性地解决差异。
 类似资料: