AVRO可选字段定义及Confluent Schema Registry兼容性报错咨询
Avro可选字段的定义及兼容性规则
1. 可选字段的准确定义
Avro场景下存在两层“可选”的定义:
- 语法层面的可选:只要字段类型是包含
null的联合类型,就表示该字段的值可以为null,仅满足该条件只能保证语法合法,无法满足Schema Registry的兼容性要求。 - 可安全增删的可选字段(满足Confluent Schema Registry兼容性规则):必须同时满足两个要求:
- 字段类型为包含
null的联合类型 - 字段显式配置了
default参数,且default值的类型与联合类型的第一个元素的类型完全匹配
- 字段类型为包含
2. 各类异常现象的原因
- 删除
eligibility字段报错:删除字段时,只有被删除字段在旧schema中配置了默认值,才能保证旧schema读取新生产的无该字段的数据时,能自动填充默认值不报错。未配置"default": null时不满足该规则,因此触发409错误,添加后即可通过校验。 identificationDocument字段交换null和Document顺序后报错:Avro对联合类型的默认值有严格校验,要求默认值必须匹配联合类型的第一个元素类型。当把Document放在联合类型第一位时,default: null和第一个元素类型不匹配,因此就算加了默认值也无法通过兼容性校验。partyDataExt字段添加默认值仍报错:该字段为嵌套自定义record类型,报错通常由两个原因导致:- 给
partyDataExt配置的默认值不符合类型要求 - 定义的嵌套
PartyDataExtrecord和Schema Registry中已存在的同名record schema不兼容,需要单独校验嵌套record的兼容性规则。
- 给
内容的提问来源于stack exchange,提问作者xarx
相关产品推荐
相关产品推荐

