删除Kafka旧Schema后注册新Schema报409不兼容错误问题咨询
问题根因
- 默认删除操作为软删除:执行的DELETE接口默认仅标记对应版本为删除状态,不会彻底清除Schema Registry底层的元数据记录,兼容性校验逻辑仍会读取这些软删除的历史版本做对比,因此触发不兼容报错。
- 兼容性校验规则未调整:默认全局或该subject的兼容性级别为
BACKWARD(向后兼容),只要存在历史版本记录(包括软删除),就会执行新旧Schema的兼容性校验,新Schema是record类型,原Schema是string类型,天然不兼容。 - 你提供的注册命令存在语法残缺:请求体中的schema字段未闭合,请求地址也拼接进了data参数中,会导致请求解析异常,即使兼容性问题解决也无法正常注册。
修复步骤
- 第一步:永久删除原有软删除的Schema版本,彻底清理历史记录:
# 永久删除指定版本 curl -X DELETE http://XXXXXX.XXXXXX:1234/subjects/AVROTEST-key/versions/1?permanent=true # 可选:直接永久删除整个subject,清空所有关联记录 curl -X DELETE http://XXXXXX.XXXXXX:1234/subjects/AVROTEST-key?permanent=true
- 第二步:临时调整该subject的兼容性级别为NONE,注册完成后可按需改回原级别:
curl -X PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{"compatibility": "NONE"}' http://XXXXXX.XXXXXX:1234/config/AVROTEST-key
- 第三步:使用修正后的完整命令注册新Schema:
curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" --data '{"schema": "{\"type\":\"record\",\"name\":\"AVROTEST\",\"fields\":[{\"name\":\"key\",\"type\":\"long\"}]}"}' http://XXXXXX.XXXXXX:1234/subjects/AVROTEST-key/versions
内容的提问来源于stack exchange,提问作者Bünyamin Şentürk
相关产品推荐
相关产品推荐

