两种模式语言:IDL 用于人工编辑,另一种更易于机器读取。
Avro 编码数据中只有对应字段的长度和具体的数据,不包含字段的类型信息。
写模式与读模式
- 写模式:使用所知道的模式的任何版本来编码数据(可以编译到代码中)
- 读模式:解码时期望数据符合某个模式,可能是构建过程中基于模式生成
Avro 的关键思想是写模式和读不必完全一样,只需要保持兼容,由读取端解决差异:通过对比查看写模式和读模式并将数据从写模式转换为读模式。
- 读取数据的代码中遇到出现在写模式但是不在读模式的字段,则忽略。
- 如果读数据的带代码需要某个字段,但是写模式不包含该字段的名称,则使用在读模式中声明的默认值填充。
模式演化
- 向前兼容:新版本的模式作为 writer,旧版本的模式作为 reader。
- 向后兼容:新版本的模式作为 reader,旧版本的模式作为 writer。
同时为了保持兼容性,只能添加莫删除具有默认值的字段。