我想将100多个表从旧的MySQL服务器复制到PostgreSQL。我安装了运行良好的debezium。现在,我想设置一个到PostgreSQL的JDBC接收器连接器。另外,我需要启用DELETE。
在这种情况下,如何为没有主键的表配置接收器连接器?
它应该复制插入,更新和删除。
答案 0 :(得分:0)
我用过Debezium和Kafka Connect 2 Postgres。我已指定键列 pk.mode = record_key 和 pk.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主题。哈哈