如何检查以前在注册表中注册的架构?
我正在尝试注册,但我得到了";正在注册的模式与主题"的早期模式不兼容;异常
兼容性检查将仅针对最新存储的主题版本进行操作
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"--数据"{兼容性":"无"}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-演进和兼容性