我有一个相当复杂的 AVRO 架构,它通过了验证,但发送给它的消息不知何故与我定义的 AVRO 架构不兼容。
从那时起,我尝试缩小架构范围以了解为什么会发生这种情况,并且似乎嵌套记录 AVRO 架构在 Pub/Sub 中效果不太好。
例如,考虑以下 AVRO 架构:
{
"type" : "record",
"name" : "Avro",
"fields" : [
{
"name" : "foo",
"type" : {
"name": "foo_1",
"type": "int"
}
}
]
}
和示例消息:
{
"foo": {
"foo_1": 42
}
}
上面的示例架构通过了 Pub/Sub 中的架构验证,但是当我测试上面的消息时,它失败了。
我发现类似的帖子here,但它并没有多大帮助。
也许 Pub/Sub 存在嵌套记录问题?
非常感谢。
您提供的架构未指定嵌套记录。请注意,字段内没有额外的
"record"
类型。您想要匹配您指定的消息的模式是:
{
"type": "record",
"name": "Avro",
"fields": [
{
"name": "foo",
"type": {
"type": "record",
"name": "NestedRecord",
"fields": [
{
"name": "foo_1",
"type": "int"
}
]
}
}
]
}
您指定的架构有一个记录,其中包含一个名为
int
的单个 foo
字段。嵌套的 "name"
规范基本上被忽略。这是一条针对您提供的架构有效的消息:
{
"foo": 42
}