Compatibility 如何在向avro模式中的嵌套映射添加新类型时保持完全的可传递兼容性?

Compatibility 如何在向avro模式中的嵌套映射添加新类型时保持完全的可传递兼容性?,compatibility,avro,confluent-schema-registry,Compatibility,Avro,Confluent Schema Registry,我有一个现有的avro模式,其中包含一个字段,该字段具有记录类型的映射的嵌套映射(现在我们称之为RecordA)。我想知道是否有可能在保持完全兼容的同时,向这个嵌套映射添加一个新的记录类型RecordB 我的想法是,只要内部映射被默认为空映射,它仍然遵循模式,因此它是向后/向前兼容的 我试图在.avdl文件中将类型映射映射重新定义为映射,但架构注册表告诉我这不兼容 我还尝试将每个映射分别默认为生成的.avsc文件中的空映射({}),但schema registry表示这也是不兼容的 我确实想承认

我有一个现有的avro模式,其中包含一个字段,该字段具有记录类型的映射的嵌套映射(现在我们称之为RecordA)。我想知道是否有可能在保持完全兼容的同时,向这个嵌套映射添加一个新的记录类型RecordB

我的想法是,只要内部映射被默认为空映射,它仍然遵循模式,因此它是向后/向前兼容的

我试图在
.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{}
with
null
或默认值,因此我认为映射需要映射到具有该字段任一版本的类型的并集

每次尝试都会从架构注册表兼容性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
}