Json AVRO联合类型序列化格式
我在使用SpringKafkaAPI向confluent平台上运行的代理上的主题发送消息时遇到问题。我正在使用AVRO模式和apacheavro插件for maven从模式生成Java对象 该模式正在Confluent schema Registry中以正确的格式正确注册,但当我使用Confluent KafkaAvroSerializer发送消息时,消息中的联合类型以“怪异”格式显示 这是我的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"
{
"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"
}
编辑时带有附加说明编辑时带有附加说明