Debezium 可能会产生无效的模式

Debezium might produce invalid schema

我遇到了 Avro 和 Schema Registry 的问题。 Debezium 创建架构和主题后,我从架构注册表下载了架构。我将它放入 .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
      }
    ]
  }

我运行两个实验:

  1. 我试图将其放回架构注册表中,但出现此错误:MyValue 不正确。 当我删除 "after" 记录时,该架构似乎运行良好。

  2. 我使用 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 产生了无效的模式还是模式注册表有错误?

MyValue is not correct.

那不是 Avro 类型。您必须将实际记录嵌入联合中,就像之前的值

换句话说,您无法在架构中交叉引用记录类型,AFAIK

When I try to consume the topic above, I see this error:

消费者不注册模式,所以不清楚你是如何得到这个错误的,除非可能使用 Kafka Streams,它会产生中间主题