如何通过路由将多租户Mongo集合配置到对应Kafka主题
解决多租户MongoDB集合路由到不同Kafka主题的Debezium配置方案
你需要通过多个RegexRouter转换规则实现不同类型集合的分主题路由,核心思路是为每种集合类型配置独立的正则匹配与替换逻辑,以下是具体实现步骤和配置示例:
关键配置要点
- 扩展集合白名单:将所有需要同步的租户集合加入
collection.whitelist,可用通配符简化配置(比如tenant*.circles,tenant*.triangle匹配所有租户的circles和triangle集合)。 - 多转换规则配置:Debezium支持同时配置多个transform,每个规则用唯一名称标识,按顺序执行匹配和替换操作。
完整配置示例
{ "name": "mongodb-connector", "config": { "connector.class": "io.debezium.connector.mongodb.MongoDbConnector", "mongodb.hosts": "your-mongodb-host:27017", "mongodb.name": "mongodb-source", // 枚举所有目标集合,或用通配符简化:"tenant*.circles,tenant*.triangle" "collection.whitelist": "tenant1.circles,tenant2.circles,tenant1.triangle,tenant2.triangle,tenant3.triangle", "transforms": "routerCircles,routerTriangles", // 处理circles集合路由到circleTopic "transforms.routerCircles.type": "org.apache.kafka.connect.transforms.RegexRouter", "transforms.routerCircles.regex": "(.*)\\.circles", "transforms.routerCircles.replacement": "circleTopic", // 处理triangle集合路由到triangleTopic "transforms.routerTriangles.type": "org.apache.kafka.connect.transforms.RegexRouter", "transforms.routerTriangles.regex": "(.*)\\.triangle", "transforms.routerTriangles.replacement": "triangleTopic" } }
配置细节说明
transforms参数用逗号分隔多个转换规则的自定义名称(如routerCircles和routerTriangles),名称需唯一。- 正则
(.*)\.circles会匹配所有以.circles结尾的集合名(比如tenant1.circles),并将其路由到circleTopic。 - 同理,
(.*)\.triangle匹配所有.triangle结尾的集合,路由到triangleTopic。
实用注意事项
- 租户数量较多时,优先用通配符简化白名单配置,避免逐个列举租户集合。
- 确保正则匹配逻辑精准,避免不同规则间出现冲突(比如不要用过于宽泛的正则导致集合被错误路由)。
- 配置完成后,可启动连接器并检查Kafka主题的消息是否正确路由,再根据实际情况调整正则规则。
内容的提问来源于stack exchange,提问作者Liviu
相关产品推荐
相关产品推荐

