两种模式语言:IDL 用于人工编辑,另一种更易于机器读取。

Avro 编码数据中只有对应字段的长度和具体的数据,不包含字段的类型信息。

写模式与读模式

  • 写模式:使用所知道的模式的任何版本来编码数据(可以编译到代码中)
  • 读模式:解码时期望数据符合某个模式,可能是构建过程中基于模式生成

Avro 的关键思想是写模式和读不必完全一样,只需要保持兼容,由读取端解决差异:通过对比查看写模式和读模式并将数据从写模式转换为读模式。

  1. 读取数据的代码中遇到出现在写模式但是不在读模式的字段,则忽略。
  2. 如果读数据的带代码需要某个字段,但是写模式不包含该字段的名称,则使用在读模式中声明的默认值填充。

模式演化

  • 向前兼容:新版本的模式作为 writer,旧版本的模式作为 reader。
  • 向后兼容:新版本的模式作为 reader,旧版本的模式作为 writer。

同时为了保持兼容性,只能添加莫删除具有默认值的字段。