Json AVRO联合类型序列化格式

Json AVRO联合类型序列化格式,json,serialization,avro,spring-kafka,confluent-schema-registry,Json,Serialization,Avro,Spring Kafka,Confluent Schema Registry,我在使用SpringKafkaAPI向confluent平台上运行的代理上的主题发送消息时遇到问题。我正在使用AVRO模式和apacheavro插件for maven从模式生成Java对象 该模式正在Confluent schema Registry中以正确的格式正确注册,但当我使用Confluent KafkaAvroSerializer发送消息时,消息中的联合类型以“怪异”格式显示 这是我的AVRO模式 { "namespace": "com.mynamespace", "name"

我在使用SpringKafkaAPI向confluent平台上运行的代理上的主题发送消息时遇到问题。我正在使用AVRO模式和apacheavro插件for maven从模式生成Java对象

该模式正在Confluent schema Registry中以正确的格式正确注册,但当我使用Confluent KafkaAvroSerializer发送消息时,消息中的联合类型以“怪异”格式显示

这是我的AVRO模式

{
  "namespace": "com.mynamespace",
  "name": "MessageValue",
  "doc": "Kafka message value",
  "type": "record",
  "fields": [
    {
      "name": "metadata",
      "type": {
        "name": "Metadata",
        "doc": "metadata model description",
        "type": "record",
        "fields": [
          {
            "name": "eventVersion",
            "type": [
               "null",
               "string"
            ]
          },
          {
            "name": "eventTime",
            "type": "string"
          },
          {
            "name": "eventSource",
            "type": "string"
          },
          {
            "name": "eventKey",
            "type": "string"
          }
        ]
      }
    }
  ]
}
以下是发送到主题的序列化JSON对象:

{
  "metadata": {
    "eventVersion": {
      "string": "1.0"
    },
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
我的问题是属于联合类型的字段。它被序列化的方式似乎是带有以下字段的单独json对象:

string: "1.0"
我已尝试将我的模式更改为非联合类型,如

{
   "name": "eventVersion",
   "type": "string",
   "default": "null"
}
但我总是要发送字段,因为它使字段成为强制性的

此外,我在他们的文档中找不到任何与此相关的内容。 是否有人遇到过此问题,并且可能知道如何使序列化对象看起来像这样:

{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": {
      "string": "1.0"
    },
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
编辑@Dean Van Greunen 打字错误是由我在这里输入问题,并从我无法共享的模式中剪切业务信息造成的。在代码中,模式很好。这个问题在问题中得到了明确说明。发送给kafka的序列化JSON对象如下所示:

{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": {
      "string": "1.0"
    },
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
“eventVersion”字段是我的问题

...
"eventVersion":{
    "string" : "1.0"
}
...
看起来这个字段是单独的对象,字段名为“字符串和值”1.0。我知道这是由于UNION avro类型的限制,但我想知道是否有一个解决方案使其看起来像这样:

{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": {
      "string": "1.0"
    },
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}
{
  "metadata": {
    "eventVersion": "1.0",
    "eventTime": "2019-01-01T09:00",
    "eventSource": "Channel1",
    "eventKey": "SomeKey"
  }
}

此处“eventVersion”字段为简单类型字符串

不确定问题,请更新您的问题;然而,我发现了一些错误,见下文

你说AVRO方案不正确。字段中的第一个元素缺少

{
  "namespace": "com.mynamespace",
  "name": "MessageValue",
  "doc": "Kafka message value",
  "type": "record",
  "fields": [
    {
      "name": "metadata",
      "type": {
        "name": "Metadata",
        "doc": "metadata model description",
        "type": "record",
        "fields": [
          {
            "name": "eventVersion",
            "type": [
               "null",
               "string"
            ]
          },
          {
            "name": "eventTime",
            "type": "string"
          },
          {
            "name": "eventSource",
            "type": "string"
          },
          {
            "name": "eventKey",
            "type": "string"
          }
        ]
      }
    }
  ]
}
默认值
存在拼写错误

{
   "name": "eventVersion",
   "type": "string",
   "default": "null"
}

不确定问题,请更新您的问题;然而,我发现了一些错误,见下文

你说AVRO方案不正确。字段中的第一个元素缺少

{
  "namespace": "com.mynamespace",
  "name": "MessageValue",
  "doc": "Kafka message value",
  "type": "record",
  "fields": [
    {
      "name": "metadata",
      "type": {
        "name": "Metadata",
        "doc": "metadata model description",
        "type": "record",
        "fields": [
          {
            "name": "eventVersion",
            "type": [
               "null",
               "string"
            ]
          },
          {
            "name": "eventTime",
            "type": "string"
          },
          {
            "name": "eventSource",
            "type": "string"
          },
          {
            "name": "eventKey",
            "type": "string"
          }
        ]
      }
    }
  ]
}
默认值
存在拼写错误

{
   "name": "eventVersion",
   "type": "string",
   "default": "null"
}

编辑时带有附加说明编辑时带有附加说明