更改命名空间时,Confluence 架构上出现预期兼容性错误

问题描述 投票:0回答:1

有谁知道为什么在添加新版本的架构时,使用向后兼容性在 Avro 架构中进行名称空间更改不会触发融合架构注册表中的错误。

发生的事情是我们注册了新版本的架构,并更改了命名空间。虽然生产者已使用新代码(新命名空间)进行更新,但消费者并未更新,因此每次读取时都会触发反序列化异常。

Could not find class X specified in writer's schema whilst finding reader's schema for a Specific Record.

我希望在将新版本的模式添加到 Confluence Schema Registry 时会触发错误,但事实并非如此。

java avro confluent-schema-registry
1个回答
0
投票

命名空间不是架构解析规范的一部分。大多数情况下只有字段名称及其类型。

https://avro.apache.org/docs/1.11.1/specification/#schema-resolution

另一方面,Java 在命名空间的类路径上生成类,因此 JVM 包生成需要它。

Python Avro 客户端不关心命名空间,例如,因为不存在包可见性/范围的结构或概念。

注册表不是特定于客户端,并且在注册过程中命名空间实际上并不比

doc
注释或其他元数据更多使用。

您可以通过使用别名来引用“旧”命名空间名称来修复您的Java错误。或者,您可以使用 GenericRecord,而不是 SpecificRecord 类型。否则,您需要编译消费者代码以包含 Avro 生产者的“编写器架构”。理想情况下,您使用 Maven 依赖项来执行此操作,而不是复制 AVSC 文件,否则,您可以使用 Schema Registry Maven Plugin

download
目标以及 avro-maven-plugin 来创建生产者已注册的 SpecificRecord 类型。

© www.soinside.com 2019 - 2024. All rights reserved.