将带有数据的新表包含到现有的 Debezium 连接器中
Posted
技术标签:
【中文标题】将带有数据的新表包含到现有的 Debezium 连接器中【英文标题】:Include new tables with data to existing Debezium connector 【发布时间】:2021-02-05 23:02:11 【问题描述】:目标:
需要向现有的 Debezium mysql 连接器版本 1.1.1.Final 添加新表。连接器重新启动并更新配置后,表中的数据应填充到主题中(table.whitelist 中的新表)。
问题:
没有明确的策略来添加新表,该表将在拍摄初始快照后连同其数据一起添加到 Kafka(之前版本的连接器正在工作)。我们正在为工作连接器寻找类似于 snapshot.select.statement.overrides 的东西。 snapshot.select.statement.overrides 在快照已经创建并且连接器使用新表重新启动时不起作用。
可能的解决方案:
为应该使用数据初始化的表创建并运行新连接器(snapshot.mode=initial)。缺点:每个版本可能包含一个新的连接器。
或
-
为表创建迁移连接器 (v2)(使用配置 snapshot.mode=initial 和新的 database.history.kafka.topic)
完成快照后删除连接器 v2
删除 database.history.kafka.topic 用于之前的连接器(v1)
使用连接器 (v2) 中的表更新连接器 (v1) - 将它们放入 table.whitelist
将 snapshot.mode 更改为 schema_only_recovery 并启动连接器(v1)
问题:
哪种方式是官方的?也许我错过了什么,还有比第二种更简单的方法吗?
统一更新: 根据@Matar 的评论和一些调查,似乎不需要删除 database.history.kafka.topic,因为在默认配置中,它无论如何都会从数据库中收集所有 DDL。
【问题讨论】:
我正在处理类似于您手头的任务 (MSSQL) 的事情。我选择了解决方案(2)。我只是想知道你为什么要创建一个新的 database.history.kafka.topic ?我不能只使用 V1 中的那个,因为所有表都属于同一个数据库。 @matar 我认为,你是对的。无需再次重新创建主题,特别是如果您使用连接器正在侦听数据库中的所有更改。我想知道 Debezium 多年后还不支持升级方案。 【参考方案1】:使用最新版本的 Debezium Server,您可以添加以下配置值
debezium.snapshot.new.tables=parallel
如果你使用的是 Debezium,你可以试试这个配置值
snapshot.new.tables=parallel
注意:Debeziyum 服务器是支持 Kinesis、Google Pub sub 和 Apache Pulsar 的服务器。我正在使用它,它的配置有点不同。我必须在每个项目之前添加“debezium”
添加此配置后,任何添加到 tables.whitelist 的内容,Debezium 都会为这些额外的表创建快照。
【讨论】:
以上是关于将带有数据的新表包含到现有的 Debezium 连接器中的主要内容,如果未能解决你的问题,请参考以下文章