是否可通过单个Kafka Topic使用MongoSourceConnector连接多个MongoDB数据库
单个Kafka Topic对接多个MongoDB数据库的实现方案
是可以实现的,目前主流有两种落地可行性高的方案,你可以根据自己的场景选择:
方案一:部署多实例MongoSourceConnector,统一输出到同一Topic
- 每个连接器实例单独对接一个MongoDB数据库,各自配置独立的连接地址、鉴权信息、需要同步的集合范围,互不干扰
- 所有连接器实例的
topic.prefix配置项设置为你的目标Kafka Topic名称即可,如果你之前开启了按集合自动生成Topic后缀的规则,需要关掉该规则,或者调整匹配逻辑保证所有消息最终都写入同一个目标Topic - 该方案配置门槛极低,不需要修改现有单库对接的成熟逻辑,不同数据库的同步任务独立运维,单个实例故障不会影响其他数据库的数据同步
- 建议额外加字段标记数据来源,避免下游消费无法区分消息来自哪个数据库,可通过连接器自带的Transform能力实现,配置示例如下:
"transforms": "AddSourceIdentifier", "transforms.AddSourceIdentifier.type": "org.apache.kafka.connect.transforms.InsertField$Value", "transforms.AddSourceIdentifier.static.field": "source_database", "transforms.AddSourceIdentifier.static.value": "你当前实例对接的MongoDB数据库名"
每个连接器实例把上面的value替换为对应对接的数据库名即可。
方案二:单MongoSourceConnector实例配置多数据库捕获规则
- 如果你使用的是Debezium MongoSourceConnector,可以直接通过
database.include.list配置项填写逗号分隔的多个需要同步的MongoDB数据库名,collection.include.list按需填写所有需要同步的集合完整路径(数据库名.集合名) - 同时配置
topic.prefix为目标Kafka Topic名称,再设置topic.naming.strategy为固定输出规则,或者自定义命名策略强制所有捕获的变更消息都写入同一个目标Topic - 该方案需要维护的连接器实例少,适合对接的数据库数量不多的场景,但要注意单个实例故障会导致所有关联数据库的同步都中断。
如果你对接的MongoDB数据库数量较多、对同步可用性要求高,优先选第一种方案;如果数据库数量少、希望简化运维,选第二种即可。
内容的提问来源于stack exchange,提问作者prince priyadarshi
相关产品推荐
相关产品推荐

