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 知道该字段使用什么。