簡體   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