架构注册表不兼容



如何检查以前在注册表中注册的架构?

我正在尝试注册,但我得到了";正在注册的模式与主题"的早期模式不兼容;异常

兼容性检查将仅针对最新存储的主题版本进行操作

https://docs.confluent.io/platform/current/schema-registry/develop/api.html#sr-api兼容性

您可以使用主题和版本号检查模式

https://docs.confluent.io/platform/current/schema-registry/develop/api.html#get--主题-(字符串-%20subject(-版本-(版本Id-%20version(-架构


两者都不会告诉你";为什么";它是不兼容的,但Avro对此有明确的文档,例如

您可以尝试以下

  • 获取以前注册的架构的所有版本的命令

SchemaRegistryURL/subjects/topicname value/versions

  • 获取所有先前注册的架构的特定版本的命令

SchemaRegistryURL/subjects/topicname value/versions/version

架构兼容性选项可能设置不正确,在这种情况下,您可以使用以下命令重置兼容性,然后尝试重新注册架构。

curl-k-X PUT-H";内容类型:application/vnd.schemaregistry.v1+json&quot--数据"{兼容性":"无"}SchemaRegistryURL/config/topic值

发件人https://docs.confluent.io/platform/current/schema-registry/avro.html#summary

兼容性

Transitive一旦给定主题的架构有两个以上版本,兼容性检查就很重要。如果兼容性配置为可传递,然后检查新模式的兼容性对照所有先前注册的模式;否则,它会检查仅针对最新架构的新架构的兼容性。

例如,如果一个主题有三个模式在订购X-2、X-1和X,然后:

可传递:确保X-2<=>X-1和X-1<=>X和X-2<=>X

非传递性:确保X-2<=>X-1和X-1<=>X、 但不一定是X-2<=>X

Confluent Schema Registry默认兼容类型BACKWARD为非传递性,这意味着它不是BACKWARD_transitive。作为结果,只针对最新架构。

BACKWARD:(默认(使用X-2的消费者可以读取生产者X-1 写入的数据

BACKWARD_TRANSITIVE:使用X-2的消费者可以读取生产者使用X-1和X 写入的数据

FORWARD:使用X-1的消费者可以读取生产商使用X-2 写入的数据

FORWARD_TRANSITIVE:使用X-1或X的消费者可以读取生产商使用X-2 写入的数据

FULL:新模式与最新注册的模式前后兼容

FULL_TRANSITIVE:新模式与以前注册的所有模式向前和向后兼容

:禁用架构兼容性检查

这在Schema Evolution中有解释。

Confluent Schema Registry默认兼容类型为BACKWARD,因此无法添加更多字段或更改数据类型。

您需要更改兼容性。

https://docs.confluent.io/platform/current/schema-registry/avro.html#schema-演进和兼容性

最新更新