融合架构注册表:JDBC接收器连接器无法识别更新架构中的新列

时间:2020-08-11 06:54:15

标签: jdbc apache-kafka apache-kafka-connect confluent-schema-registry debezium

Confluent Platform (Docker)开始,我进行了以下设置:

MySQL DB ----------> Debezium MySQL Source Connector --> Kafka (topic: X)
Kafka (topic: X) --> Confluent JDBC Sink Connector ----> Postgres DB

(我将docker-compose文件中的键和值转换器更改为Avro。)

我正在Confluent Schema Registry的帮助下测试架构的演变。我正在执行的步骤:

  1. 首先更新接收器数据库:将新列abc添加到Postgres DB表X:alter table X add column abc int;

    测试管道。好吧。

  2. 更新X的架构:在控制中心http:// localhost:9021 /上,添加默认值为abc的{​​{1}}类型的可选字段int。现在,主题X具有2个架构版本。我保留了默认的向后兼容性。

    再次测试管道。好吧。

  3. 更新源数据库:将新列null添加到MySQL数据库表X:abc

    通过更新源表的记录来测试管道。我在Kafka Connect服务日志中看到堆栈跟踪。不好。

alter table X add column abc int;

我已经在Confluent Control Center上再次检查了[2020-08-11 05:58:45,014] INFO Unable to find fields [SinkRecordField{schema=Schema{INT32}, name='abc', isPrimaryKey=false}] among column names [... list of columns ...] (io.confluent.connect.jdbc.sink.DbStructure) [2020-08-11 05:58:45,017] ERROR WorkerSinkTask{id=test-sink-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted. Error: Table "X" is missing fields ([SinkRecordField{schema=Schema{INT32}, name='abc', isPrimaryKey=false}]) and auto-evolution is disabled (org.apache.kafka.connect.runtime.WorkerSinkTask) 的架构,现在有3个版本。版本2和版本3相同。更新源表后,新消息是否创建了新的相同架构版本?

关于自动进化的错误消息,我的理解是我们应该保持禁用状态,因为我们将依赖Schema Registry来控制进化。

能否请您帮助我理解为何即使在更新架构后Confluent JDBC连接器也无法找到新字段?我在这里想念什么?

0 个答案:

没有答案