繁体   English   中英

Kafka 连接 JDBC 接收器连接器 - 没有主键的表

[英]Kafka connect JDBC sink connector - tables without Primary Key

我想将 100 多个表从旧的 MySQL 服务器复制到 PostgreSQL。我安装了运行良好的 debezium。 现在我想设置一个 JDBC 接收器连接器到 PostgreSQL。我还需要启用 DELETE。

在这种情况下,如何为没有主键的表配置接收器连接器?

它应该复制插入、更新和删除。

我用过 Debezium 和 Kafka Connect 2 Postgres。 我指定了键列pk.mode=record_keypk.fields=name_of_pk_column ,因为 Kafka Connect 需要它,所以它可以删除 ( enable.delete=true ) 和更新。 您也可以设置 auto.evolve=true。

如果将 enable.delete 设置为 true,则必须指定 PK。 源表和目标表中的列键必须相同。

但是,如果您需要传输多个表,这并不方便。

我没有尝试过,但我认为单个消息转换脚本可能会从 kafka 消息中获取密钥,转换它(可能重命名它)并在 kafka_connect_postgres 设置中使用它。

我实际上在双方都有 1:1 的数据库,所以我只需要担心获取 pk 列名。

如果你愿意,我可以为 Kafka connect、Kafka pg connect 提供我的设置......

connector-pg.properties
name=sink-postgres
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
#tasks.max=2
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=true
topics=pokladna.public.books #my debezium topic with CDC from source DB
connection.url=jdbc:postgresql://localhost:5434/postgres
connection.user=postgres
connection.password=postgres
dialect.name=PostgreSqlDatabaseDialect
table.name.format=books_kafka #targe table in same db, in thus case given by url
transforms=unwrap
transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState
transforms.unwrap.drop.tombstones=false
auto.create=true
auto.evolve=true
insert.mode=upsert #insert does not work for updates
delete.enabled=true
pk.fields=id #pk column name same in target and resource db
pk.mode=record_key

尝试使用SMT extract field ,但对我来说还没有用。 我仍然不知道如何自动从 kafka 消息中提取主键。 也许我必须编写自己的 SMT...

实际上,我将开始一个关于它的新 SO 主题。 哈哈

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM