【发布时间】:2020-06-19 09:41:03
【问题描述】:
我的 Avro 架构中有一个状态枚举字段,其中当前可能的状态是
PENDING
APPROVED
REJECTED
我想在这个枚举“RESUBMIT”中再添加一个值。此更改是否向后兼容?
【问题讨论】:
标签: apache-kafka avro
我的 Avro 架构中有一个状态枚举字段,其中当前可能的状态是
PENDING
APPROVED
REJECTED
我想在这个枚举“RESUBMIT”中再添加一个值。此更改是否向后兼容?
【问题讨论】:
标签: apache-kafka avro
不,不是。原因如下: 如果您正在使用这个新模式来向 Kafka 发送事件,那么所有客户端都将尝试反序列化该值。 当出现新类型的事件时,有两种情况:
所以,不,这不向后兼容。
更新: 您可以通过指定 枚举的默认值(在 Avro 版本 1.10.2+ 中可用)来避免反序列化失败
【讨论】:
根据 https://docs.confluent.io/platform/current/schema-registry/avro.html
- 向后兼容意味着使用新架构的消费者可以读取使用最后一个架构生成的数据
- FORWARD 兼容性意味着使用新架构生成的数据可以由使用最后一个架构的消费者读取
按照上面的定义/术语,变化是向后的 兼容,即您的所有消费者都需要先升级。但 不与 FORWARD 兼容,因为使用旧模式的消费者不能 反序列化这个。
更正我之前的回答。
有一种方法可以以兼容的方式添加新的枚举值
【讨论】:
我不这么认为,但欢迎您使用 Schema Registry API 来验证兼容性
https://docs.confluent.io/current/schema-registry/develop/api.html#id1
【讨论】: