Kafka Connect Debezium MongoDB源连接器无法连接实例求助
Kafka Connect无法连接MongoDB的原因及修复方案
核心问题分析
1. MongoDB副本集初始化的主机名错误
你在初始化MongoDB副本集时,使用了localhost:27017作为节点地址:
rs.initiate({_id: "debezium", members:[{_id: 0, host: "localhost:27017"}]})
在Docker网络环境中,localhost仅指向MongoDB容器自身,Kafka Connect容器无法通过这个地址访问MongoDB服务。
2. Kafka Connect连接器的目标地址错误
连接器配置中的mongodb.hosts字段设置为"debezium/127.0.0.1:27017":
127.0.0.1指向Kafka Connect容器自身,而非MongoDB容器- 副本集名称
debezium对应的节点地址应该是Docker网络内的MongoDB容器名
修复步骤
步骤1:修正MongoDB副本集配置
- 进入MongoDB容器的命令行:
docker exec -it mongodb mongosh
- 重新初始化副本集,使用容器名
mongodb作为节点地址:
rs.initiate({ _id: "debezium", members: [{_id: 0, host: "mongodb:27017"}] })
- 验证副本集状态(确保状态正常):
rs.status()
步骤2:修正Kafka Connect连接器配置
修改register-mongodb.json中的mongodb.hosts字段为:
"mongodb.hosts": "debezium/mongodb:27017"
然后重新提交连接器配置:
# 先删除原有错误配置的连接器 curl -X DELETE http://localhost:8083/connectors/inventory-connector # 提交新配置 curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://localhost:8083/connectors/ -d @register-mongodb.json
关键原理说明
在Docker自定义网络(这里是confluent网络)中,容器之间可以通过容器名直接互相访问,每个容器的localhost仅代表自身,不能用于跨容器服务访问。因此所有跨容器的服务地址都需要使用目标容器的名称,而非localhost或127.0.0.1。
内容的提问来源于stack exchange,提问作者user1386101
相关产品推荐
相关产品推荐

