如何配置Debezium MongoDB连接器仅从Secondary节点采集CDC事件
Debezium MongoDB连接器1.6版本仅对接Secondary节点同步方案
报错核心原因:Debezium 1.6版本MongoDB连接器默认开启副本集拓扑自动发现,且读取偏好默认为
primary,会主动查找并尝试连接Primary节点拉取oplog,调整以下配置即可实现仅对接Secondary节点同步。
方案1:修改连接器原生配置(优先推荐)
在连接器的JSON配置中新增以下参数即可:
mongodb.read.preference:设置为secondary,强制连接器仅从Secondary节点读取数据和oplogmongodb.auto.detect.topology:设置为false,关闭副本集拓扑自动发现逻辑,连接器只会使用你配置的节点地址,不会主动拉取副本集全节点列表查找Primarymongodb.server.selection.timeout.ms:设置为30000(30秒),避免Secondary节点响应慢导致连接器异常重试连接其他节点mongodb.connect.timeout.ms:设置为30000,适配跨VPC访问的网络延迟
配置示例:
{ "name": "mongodb-cdc-connector", "config": { "connector.class": "io.debezium.connector.mongodb.MongoDbConnector", "mongodb.hosts": "REPLICASET/你的Secondary节点地址:27017", "mongodb.user": "你的CDC账号", "mongodb.password": "你的账号密码", "mongodb.read.preference": "secondary", "mongodb.auto.detect.topology": "false", "mongodb.server.selection.timeout.ms": 30000, "mongodb.connect.timeout.ms": 30000, // 其余原有业务配置保持不变即可 } }
注意:CDC使用的MongoDB账号需要有local库的读取权限,同时Secondary节点的oplog保留时长需要覆盖首次全量同步的时间窗口
方案2:适配1.6小版本兼容问题
如果部分1.6的迭代小版本不支持mongodb.auto.detect.topology参数,可以直接在连接地址中拼接MongoDB驱动参数,强制禁用节点发现:
- 将
mongodb.hosts参数修改为以下格式:REPLICASET/secondary1:27017,secondary2:27017?readPreference=secondary&directConnection=true&serverSelectionTimeoutMS=30000 - 其中
directConnection=true会强制连接器仅连接你指定的节点,完全不会尝试发现副本集其他节点,自然不会发起对Primary的连接请求
配置验证
启动连接器后查看运行日志,无连接Primary的报错即可;同时可分别查看Secondary、Primary节点的MongoDB访问日志,确认仅Secondary节点有来自连接器的oplog拉取请求,Primary节点无连接器访问记录,代表配置生效。
内容的提问来源于stack exchange,提问作者Mike Mulaffer
相关产品推荐
相关产品推荐

