Debezium 可能会产生无效的模式
Posted
技术标签:
【中文标题】Debezium 可能会产生无效的模式【英文标题】:Debezium might produce invalid schema 【发布时间】:2020-04-11 08:09:31 【问题描述】:我遇到了 Avro 和 Schema Registry 的问题。在 Debezium 创建了模式和主题后,我从 Schema Registry 下载了模式。我把它放到一个 .asvc 文件中,它看起来像这样:
"type": "record",
"name": "Envelope",
"namespace": "my.namespace",
"fields": [
"name": "before",
"type": [
"null",
"type": "record",
"name": "MyValue",
"fields": [
"name": "id",
"type": "int"
]
],
"default": null
,
"name": "after",
"type": [
"null",
"MyValue"
],
"default": null
]
我做了两个实验:
我尝试将其放回架构注册表,但出现此错误:MyValue 不正确。当我删除“之后”记录时,架构似乎运行良好。
我使用 avro-maven-plugin 中的“generate-sources”来生成 Java 类。当我尝试使用上面的主题时,我看到了这个错误:
线程“b2-StreamThread-1”org.apache.kafka.streams.errors.StreamsException 中的异常:在进程中捕获异常。 [...]:注册 Avro 架构时出错:[...]
原因:io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:正在注册的模式与早期的模式不兼容;错误代码:409
有人遇到过同样的问题吗?是 Debezium 产生了无效的模式,还是 Schema Registry 出现了错误?
【问题讨论】:
【参考方案1】:MyValue 不正确。
这不是 Avro 类型。您必须在联合中嵌入实际记录,就像之前的值一样
换句话说,您无法交叉引用架构中的记录类型,AFAIK
当我尝试使用上面的主题时,我看到了这个错误:
消费者不注册模式,因此不清楚你是如何得到这个错误的,除非可能使用 Kafka Streams,它会产生中间主题
【讨论】:
以上是关于Debezium 可能会产生无效的模式的主要内容,如果未能解决你的问题,请参考以下文章
成功创建 Always On SQL Server 快照后,Debezium 未跟踪 CDC
从 Avro Debezium 数据创建基于 Avro 的 KSQL 流会生成奇怪的模式
Debezium 发件箱模式 |如果我们使用 debezium,架构是用 SMT/发件箱表固定的吗