Apache kafka 卡夫卡REST代理中的例外情况;正在注册的架构与早期架构不兼容;尝试使用可为空的密钥架构发布记录时
我正试图将此消息发布到卡夫卡Rest:Apache kafka 卡夫卡REST代理中的例外情况;正在注册的架构与早期架构不兼容;尝试使用可为空的密钥架构发布记录时,apache-kafka,schema,avro,nullable,kafka-rest,Apache Kafka,Schema,Avro,Nullable,Kafka Rest,我正试图将此消息发布到卡夫卡Rest: { "key_schema": "[\"null\",\"long\"]", "value_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"XID\",\"type\"
{
"key_schema": "[\"null\",\"long\"]",
"value_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"XID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_DETAIL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ADDITIONAL_INVL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"COST_ALLOCATION_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null}],\"connect.name\":\"com.vistajet.gvedge.infrastructure.kafka.connector.GVEDGE_FI_INVOICE_TX_INFO_V2\"}",
"records": [
{
"key": {
"long": 140766
},
"value": {
"XID": {
"long": 29524623
},
"ID": {
"long": 140766
},
"INVOICE_CHANGE_COUNT": {
"long": 1
},
"INVOICE_DETAIL_CHANGE_COUNT": {
"long": 0
},
"ADDITIONAL_INVL_CHANGE_COUNT": {
"long": 0
},
"COST_ALLOCATION_CHANGE_COUNT": {
"long": 0
}
}
}
]
}
我在rest-proxy.log中发现以下错误:
[2019-04-11 14:25:58991]错误未经处理的异常导致
内部服务器错误响应
(io.confluent.rest.exceptions.GenericeExceptionMapper:38)
org.apache.kafka.common.errors.SerializationException:错误
正在注册Avro架构:“长”由以下原因引起:
io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:
正在注册的架构与早期架构不兼容;错误
代码:409
为什么会这样???我不明白为什么
"key": {
"long": 140766
}
正在触发新架构创建吗
顺便说一句
工作正常。您正在将键值设置为对象
"key": {
"long": 140766
}
这不反映您的模式:
"key_schema": "[\"null\",\"long\"]",
试试这个:
{
"key_schema": "{\"type\":\"long\"}",
"value_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"XID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_DETAIL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ADDITIONAL_INVL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"COST_ALLOCATION_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null}],\"connect.name\":\"com.vistajet.gvedge.infrastructure.kafka.connector.GVEDGE_FI_INVOICE_TX_INFO_V2\"}",
"records": [
{
"key": 234,
"value": {
"XID": {
"long": 29524623
},
"ID": {
"long": 140766
},
"INVOICE_CHANGE_COUNT": {
"long": 1
},
"INVOICE_DETAIL_CHANGE_COUNT": {
"long": 0
},
"ADDITIONAL_INVL_CHANGE_COUNT": {
"long": 0
},
"COST_ALLOCATION_CHANGE_COUNT": {
"long": 0
}
}
}
]
}
现在你的钥匙是long型的。因此,您只能将数字传递到数据中的键旁边
但是,如果您希望将键值保留为对象(如上面的示例中所示),则还需要将键值定义为记录类型:
{
"key_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2_KEY\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"long\",\"type\":[\"null\",\"long\"]}]}",
"value_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"XID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_DETAIL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ADDITIONAL_INVL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"COST_ALLOCATION_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null}],\"connect.name\":\"com.vistajet.gvedge.infrastructure.kafka.connector.GVEDGE_FI_INVOICE_TX_INFO_V2\"}",
"records": [
{
"key": {
"long": {"long": 7}
},
"value": {
"XID": {
"long": 29524623
},
"ID": {
"long": 140766
},
"INVOICE_CHANGE_COUNT": {
"long": 1
},
"INVOICE_DETAIL_CHANGE_COUNT": {
"long": 0
},
"ADDITIONAL_INVL_CHANGE_COUNT": {
"long": 0
},
"COST_ALLOCATION_CHANGE_COUNT": {
"long": 0
}
}
}
]
}
现在回到您的主要问题“正在注册的模式与以前的模式不兼容”
该消息说明您正在尝试更改模式。但是,您不能对其进行更改,因为它与当前版本的架构不兼容
如果您确定它仅用于开发,那么现在可以将模式兼容性级别更改为“无”
然后再试一次
否则,请检查您在以前的密钥架构和新密钥架构之间正在更改什么,以及为什么它不兼容
{
"key_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2_KEY\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"long\",\"type\":[\"null\",\"long\"]}]}",
"value_schema": "{\"type\":\"record\",\"name\":\"GVEDGE_FI_INVOICE_TX_INFO_V2\",\"namespace\":\"com.vistajet.gvedge.infrastructure.kafka.connector\",\"fields\":[{\"name\":\"XID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ID\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"INVOICE_DETAIL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"ADDITIONAL_INVL_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"COST_ALLOCATION_CHANGE_COUNT\",\"type\":[\"null\",\"long\"],\"default\":null}],\"connect.name\":\"com.vistajet.gvedge.infrastructure.kafka.connector.GVEDGE_FI_INVOICE_TX_INFO_V2\"}",
"records": [
{
"key": {
"long": {"long": 7}
},
"value": {
"XID": {
"long": 29524623
},
"ID": {
"long": 140766
},
"INVOICE_CHANGE_COUNT": {
"long": 1
},
"INVOICE_DETAIL_CHANGE_COUNT": {
"long": 0
},
"ADDITIONAL_INVL_CHANGE_COUNT": {
"long": 0
},
"COST_ALLOCATION_CHANGE_COUNT": {
"long": 0
}
}
}
]
}