Debezium同步多个表投递到一个Topic
Debezium 是否支持同步 多个表投递到一张topic?
答 : 支持
验证如下:
官方说明: https://debezium.io/documentation/reference/1.5/configuration/topic-routing.html
数据库db如下
配置如下
{
"name":"10.90.81.121-canalA",
"config":{
"connector.class":"io.debezium.connector.mysql.MySqlConnector",
"tasks.max":"1",
"database.hostname": "你的数据库地址",
"database.port": "3306",
"database.user": "wys",
"database.password": "wys",
"database.server.id": "184051",
"database.server.name":"cacanalAal",
"database.history.kafka.bootstrap.servers": "kafka地址:9094",
"database.history.kafka.topic":"debezium_canal",
"database.include.list": "canal",
"transforms":"Reroute",
"transforms.Reroute.type":"io.debezium.transforms.ByLogicalTableRouter",
"transforms.Reroute.topic.regex":"(.*)topic_test(.*)",
"transforms.Reroute.topic.replacement":"$1canal_test"
}
}
额外参数说明
"database.include.list": "canal", 只投递 实例下的 canal 数据库
"transforms":"Reroute", # 默认配置
"transforms.Reroute.type":"io.debezium.transforms.ByLogicalTableRouter", # 默认配置
"transforms.Reroute.topic.regex":"(.*)topic_test(.*)", # 这里同步 中间包含 topic_test 的表
"transforms.Reroute.topic.replacement":"$1canal_test" # 具体如上规则的表 将投递到 cacanalAal.canal.canal_test topic 中
参数说明
// 最终生成的某张表的kafka topic为:(database.server.name).数据库名.表名
{
"name":"debezium-test-5017", // 连接器名称
"config":{ // 连接器配置
"connector.class":"io.debezium.connector.mysql.MySqlConnector",
"database.hostname":"4.4.4.4", //MySQL数据库主机
"database.port":"5017", // MySQL数据库端口
"database.user":"test", // MySQL数据库使用用户
"database.password":"123", // 用户密码
"database.server.id":"316545017",
"database.server.name":"debezium", // 唯一的服务器逻辑名称。该名称将用作所有Kafka topic的前缀。
"database.history.kafka.bootstrap.servers":"1.1.1.1:7091,2.2.2.2:7091,3.3.3.3:7091",
"database.history.kafka.topic":"debezium_test"
}
}
-- 其余常用配置
"database.include.list": "zztest" // 仅监控哪个库的更改,默认监控所有数据库,以下均可配置为正则表达式
"database.exclude.list": "zztest" // 不监控哪个库的更改,不能和database.include.list同时使用
"table.include.list": "t1" // 监控哪些表的更改
"table.exclude.list": "t1" // 不监控哪些表的更改,不能和table.include.list同时使用
"column.include.list": "col1" // 监控哪些字段的更改
"column.exclude.list": "col1" // 不监控哪些字段的更改,不能和column.include.list同时使用
如果投递成功 我这里 应该 会生成两个 topic
其中 表 topic_test和 表 topic_test1 和 表 topic_test2 对应一个 topic cacanalAal.canal.canal_test
表 8888 对应 topic cacanalAal.canal.888
在这几张表中 分别插入一些数据
然后去查询 topic 的log
cd /service/software/debezium/kafka_2.13-2.5.0/log
执行 ls 如下
验证 数据是否进入 对应的 topic
grep -rn ‘topic_test’ cacanalAal.canal-/.log
grep -rn ‘topic_test1’ cacanalAal.canal-/.log
grep -rn ‘topic_test2’ cacanalAal.canal-/.log
grep -rn ‘8888’ cacanalAal.cana*/*.log
结果如下