Avro Schema 不向后兼容
Avro Schema is not backward compatible
我有一个 avro 模式定义为 -
@namepsace("com.test.customer)
protocol customerData {
record customerData {
union {null, string} id;
union {null, string} firstname;
}
}
上线后,我们又增加了一个字段-
@namepsace("com.test.customer)
protocol customerData {
record customerData {
union {null, string} id;
union {null, string} firstname,
union {null, string} customerType
}
}
customerType 定义为 null,字符串。即使这样,在向 confluent registry 注册模式时,我们也会收到错误 -
正在注册的架构与早期架构不兼容。
如果有任何原因,请告诉我们。我们已通过将 customerType 明确默认为 null 来解决此问题,
union {null, string} customerType = null;
但不知何故我觉得这不是必需的。请告诉我为什么即使架构定义为 {null, string}
我们也会收到错误消息
"union {null, string} customerType"表示customerType可以为null,但默认未定义。默认可以是任何东西,比如
union {null, string} customerType = ""; (空)
union {null, string} customerType = null;
您必须指定一个默认值,以便在缺少该字段时,Avro 知道该字段使用什么。
我有一个 avro 模式定义为 -
@namepsace("com.test.customer)
protocol customerData {
record customerData {
union {null, string} id;
union {null, string} firstname;
}
}
上线后,我们又增加了一个字段-
@namepsace("com.test.customer)
protocol customerData {
record customerData {
union {null, string} id;
union {null, string} firstname,
union {null, string} customerType
}
}
customerType 定义为 null,字符串。即使这样,在向 confluent registry 注册模式时,我们也会收到错误 - 正在注册的架构与早期架构不兼容。
如果有任何原因,请告诉我们。我们已通过将 customerType 明确默认为 null 来解决此问题,
union {null, string} customerType = null;
但不知何故我觉得这不是必需的。请告诉我为什么即使架构定义为 {null, string}
我们也会收到错误消息"union {null, string} customerType"表示customerType可以为null,但默认未定义。默认可以是任何东西,比如
union {null, string} customerType = ""; (空)
union {null, string} customerType = null;
您必须指定一个默认值,以便在缺少该字段时,Avro 知道该字段使用什么。