Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍

Avro Schema Evolution

schema evolution不知道中文官方翻译是什么,schema演化?进化?不管了,懂意思就好。本篇文章主要介绍一下Avro Schema进化后的一些兼容性问题。

 

Schema Evolution有4种:

Backward: 向后兼容,用新schema可以读取旧数据,有些字段没有数据,就用default值

Forward: 向前兼容,用旧schema可以读取新数据,avro将忽略新加的字段

Full: 全兼容,支持向前兼容,向后兼容

Breaking: 不兼容

 

1. Backward Compatible change

Backward: 向后兼容,用新schema可以读取旧数据,有些字段没有数据,就用default

Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍_第1张图片

  • 由于有了默认值,我们可以使用新schema读取旧数据。如果字段不存在,Avro将使用默认值
  • 如果要向后兼容,新schema的新增栏位必须要有默认值

2. Forward Compatible change

  • Forward: 向前兼容,用旧schema可以读取新数据,avro将忽略新加的字段
  • 如果要向前兼容,删掉的栏位必须要有默认值

 Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍_第2张图片

 Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍_第3张图片

3. Fully Compatible change

Full: 全兼容,支持向前兼容,向后兼容

想要全兼容要做到以下两点:

  • 只添加有默认值的字段
  • 只移除有默认值的字段

4. Not Compatible change

下面的一些改变会导致不兼容:

  • 从枚举中添加/删除元素
  • 更改字段数据类型(例如:string à int)
  • 重命名必需的字段(字段没有默认值)

 

编写Avro schema时的一些建议:

1.Make your primary key required

2.Give default values to all the fields that could be removed in the future

3.Be very careful when using Enums as they can’t evolve over time

4.Don’t rename fields. You can add aliases instead (other names)

5.When evolving a schema, ALWAYS give default values

6.When evolving a schema, NEVER delete a required field

 

你可能感兴趣的:(Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍)