我在JDBC kafka源连接器中使用自定义查询,如果我使用批量模式,谁能告诉我在JDBC kafka源连接器中使用自定义查询时的模式是什么,那么它将重新插入kafka主题中的所有数据。 注意:-我的表中没有任何主键或时间戳列。
答案 0 :(得分:0)
您可以使用incrementing or timestamp
incrementing
-在每个表上使用严格递增的列来 仅检测新行。请注意,这不会检测到修改或 删除现有行。
timestamp
-使用时间戳记(或 类似于timestamp的列)来检测新行和修改过的行。假设 该列随每次写入而更新,并且值是 单调递增,但不一定唯一。
timestamp+incrementing
-使用两列,即时间戳列, 检测新行和修改行以及严格递增的列 提供用于更新的全局唯一ID,以便可以分配每一行 唯一的流偏移量。
timestamp
的示例:
name=mysql-source-test
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=10
connection.url=jdbc:mysql://mysql.example.com:3306/my_database?user=myuser&password=mypass
table.whitelist=users,products
mode=timestamp
timestamp.column.name=last_modified
topic.prefix=mysql-test-
incrementing
的示例:
name=mysql-source-test
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=10
connection.url=jdbc:mysql://mysql.example.com:3306/my_database?user=myuser&password=mypass
table.whitelist=users,products
mode=incrementing
incrementing.column.name=id
topic.prefix=mysql-test-
timestamp+incrementing
的示例:
name=mysql-source-test
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=10
connection.url=jdbc:mysql://mysql.example.com:3306/my_database?user=myuser&password=mypass
table.whitelist=users,products
mode=timestamp+incrementing
incrementing.column.name=id
timestamp.column.name=last_modified
topic.prefix=mysql-test-
答案 1 :(得分:0)
如果没有时间戳或ID列递增,则无法进行基于查询的CDC,只能进行批量加载。
您的替代选择是将基于日志的CDC与Debezium等工具一起使用。
此演讲详细介绍了每个可用选项和工具:http://rmoff.dev/ksny19-no-more-silos