使用 Debezium 将所有数据库表捕获到一个 Kafka 主题 [重复]

Posted

技术标签:

【中文标题】使用 Debezium 将所有数据库表捕获到一个 Kafka 主题 [重复]【英文标题】:Capture all database tables to one Kafka topic with Debezium [duplicate] 【发布时间】:2019-02-07 21:39:37 【问题描述】:

如何配置 Debezium 以将数据库中的所有表发布到单个 Kafka 主题?

有可能吗?

【问题讨论】:

不清楚为什么要这样做,因为每个表都有不同的模式,并且在 Kafka 中拥有许多主题没有缺点 @cricket_007 一种情况可能是您的数据库中有多个租户动态创建自己的类型(表)作为其业务模型定义的一部分。在这种情况下管理主题可能会变得笨拙。例如,您可以选择对租户数据进行分组,并为每个租户设置一个主题。 【参考方案1】:

默认情况下,Debezium 为每个数据库+表写出一个主题

不过,您可能想查看topic routing 上的文档

Debezium 使您能够使用单个消息转换或 SMT 在消息到达转换器之前重新路由发出的更改。 Debezium 提供的 SMT 使您能够根据正则表达式和替换模式重写主题和键,可根据 Debezium 实例进行配置。

所以你可以尝试类似的东西

transforms=Combine
transforms.Combine.type=io.debezium.transforms.ByLogicalTableRouter
transforms.Combine.topic.regex=(.*)
transforms.Combine.topic.replacement=all_tables

您可以在 Kafka Connect 文档部分找到其他 SMT 示例,我认为 RegexRouter 值得一试

【讨论】:

我应该在Kafka连接中对connect-file-source.properties进行上述更改吗? 不,这些是 Debezium 属性 谢谢。但是我尝试了上面它没有用,但是这个帖子答案有效Is it possible in Debezium to configure table_name => kafka topic mapping?

以上是关于使用 Debezium 将所有数据库表捕获到一个 Kafka 主题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL使用Debezium更改为Kafka-仅捕获DDL stmts

如何使用debezium更改数据捕获在mysql中捕获数据并在kafka connect中使用jdbc sink?

PostgreSQL 和事务上的 Debezium CDC

如何使用 Debezium (cdc) 将从 mysql 获取的更改接收到另一个 mysql db

在 Debezium 中加入:MySQL 到 Elasticsearch

将带有数据的新表包含到现有的 Debezium 连接器中