Compatibility 如何在向avro模式中的嵌套映射添加新类型时保持完全的可传递兼容性?
我有一个现有的avro模式,其中包含一个字段,该字段具有记录类型的映射的嵌套映射(现在我们称之为RecordA)。我想知道是否有可能在保持完全兼容的同时,向这个嵌套映射添加一个新的记录类型RecordB 我的想法是,只要内部映射被默认为空映射,它仍然遵循模式,因此它是向后/向前兼容的 我试图在Compatibility 如何在向avro模式中的嵌套映射添加新类型时保持完全的可传递兼容性?,compatibility,avro,confluent-schema-registry,Compatibility,Avro,Confluent Schema Registry,我有一个现有的avro模式,其中包含一个字段,该字段具有记录类型的映射的嵌套映射(现在我们称之为RecordA)。我想知道是否有可能在保持完全兼容的同时,向这个嵌套映射添加一个新的记录类型RecordB 我的想法是,只要内部映射被默认为空映射,它仍然遵循模式,因此它是向后/向前兼容的 我试图在.avdl文件中将类型映射映射重新定义为映射,但架构注册表告诉我这不兼容 我还尝试将每个映射分别默认为生成的.avsc文件中的空映射({}),但schema registry表示这也是不兼容的 我确实想承认
.avdl
文件中将类型映射映射
重新定义为映射
,但架构注册表告诉我这不兼容
我还尝试将每个映射分别默认为生成的.avsc
文件中的空映射({}
),但schema registry表示这也是不兼容的
我确实想承认,我知道map
是一种不好的做法,但已经做的事情已经做了
注册架构(原始).avdl
:
record Outer {
map<map<RecordA>> maps;
}
record Outer {
map<map<union{RecordA, RecordB}>> maps = {};
}
尝试使用.avdl
:
record Outer {
map<map<RecordA>> maps;
}
record Outer {
map<map<union{RecordA, RecordB}>> maps = {};
}
最终目标是将映射
的映射
到一个记录,该记录的字段可以是字符串
或数组
。原始架构已注册到架构注册表,其中字段的类型为string
,没有union{}
withnull
或默认值,因此我认为映射需要映射到具有该字段任一版本的类型的并集
每次尝试都会从架构注册表兼容性API返回以下内容
{
"is_compatible": false
}
如有任何见解,将不胜感激
{
"name" : "maps",
"type" : {
"type" : "map",
"values" : {
"type" : "map",
"values" : [ {
"type" : "record",
"name" : "RecordA",
"fields" : [ {
"name" : "value",
"type" : "string"
}, {
"name" : "updateTime",
"type" : "string"
} ],
"default": { }
}, {
"type" : "record",
"name" : "RecordB",
"fields" : [ {
"name" : "value",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "values",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "updateTime",
"type" : [ "null", "string" ],
"default" : null
} ],
"default": { }
} ]
}
},
"default" : { }
}
{
"is_compatible": false
}