Docker部署Confluent Platform环境添加MongoDB Sink Connector问题咨询
遗漏操作步骤说明
你目前确实遗漏了几个核心操作,是导致数据没有同步的主要原因:
- 构建的自定义连接器镜像没有替换掉docker-compose中原有kafka-connect服务的镜像,运行的依旧是没有MongoDB连接器的官方镜像
- 仅在本地编辑了
MongoDbSinkConnector.properties文件,没有将该配置提交注册到Kafka Connect服务,连接器不会自动加载本地配置文件 - 未验证核心配置项匹配性:比如连接器配置的
topics/topics.regex是否和你生产消息的Topic名称完全一致、转换器配置是否和消息生产端的序列化规则匹配、MongoDB接入账号是否有目标库表的写入权限
需修改的docker-compose.yml配置项
你需要对原有的docker-compose.yml做如下调整:
- 找到
cp-kafka-connect服务的image配置项,将原有官方镜像地址替换为你构建的自定义镜像my-custom-image:1.0.0 - 确保kafka-connect服务和MongoDB处于同一可互通的网络:如果MongoDB部署在宿主机,可添加
extra_hosts配置映射宿主机地址;如果MongoDB也在同个docker-compose集群内,确保两个服务属于同一个networks配置 - 可选择将本地的
MongoDbSinkConnector.properties挂载到容器内的指定路径,方便后续读取配置,示例挂载配置:
volumes: - ./etc/MongoDbSinkConnector.properties:/opt/confluent/etc/MongoDbSinkConnector.properties
- 调整完成后执行
docker-compose up -d重启kafka-connect服务,使镜像和配置生效
连接器调试与日志排查方法
日志排查路径
- 优先查看Kafka Connect容器的运行日志,执行命令:
docker logs -f <kafka-connect容器名称>,连接器启动报错、MongoDB连接失败、消息解析错误、写入权限异常等所有问题都会在该日志中打印 - 如需排查MongoDB侧的问题,可查看MongoDB的服务日志,确认是否有来自Kafka Connect节点的连接请求、是否有权限拒绝类的报错
运行状态检查
可通过Kafka Connect自带的REST API查询连接器运行状态:
- 查询所有已注册的连接器:
curl http://<kafka-connect服务IP>:8083/connectors,确认你的MongoDB Sink连接器已存在于返回列表中 - 查询指定连接器的运行状态:
curl http://<kafka-connect服务IP>:8083/connectors/<你的连接器名称>/status,如果返回的state字段为FAILED,可直接查看返回体中的error字段获取报错原因 - 查询连接器任务的运行状态:
curl http://<kafka-connect服务IP>:8083/connectors/<你的连接器名称>/tasks/0/status,连接器本身状态正常但任务执行失败的报错会在该接口返回
其他调试手段
- 手动向配置的同步Topic发送测试消息,观察Kafka Connect日志是否有消费记录、是否抛出对应的报错
- 验证连接器配置的转换器规则是否和生产端一致,比如生产端用String序列化,连接器端就不能配置为Avro转换器,否则会出现消息解析失败的问题
内容的提问来源于stack exchange,提问作者Gerald Hughes
相关产品推荐
相关产品推荐

