将带有数据的新表包含到现有的 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.whitelistsnapshot.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 连接器中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Golang将文件添加到现有的zip文件中

将文本插入到现有的大文件中

将 XSLT 中的新类添加到现有的 div 标签类?

如何将新表添加到 Debezium MySQL 连接器?

将带有分页的 UIScrollView 添加到现有的 UIViewController

将单个令牌节点添加到现有的 datastax cassandra 集群和数据传输不起作用