You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

创建JdbcSourceConnector连接MySQL时遇Connection refused问题求助

问题描述

在本地Docker部署Confluent Platform后,尝试通过JdbcSourceConnector从MySQL拉取数据,始终抛出连接拒绝异常:

java.net.ConnectException: Connection refused (Connection refused)

连接器配置

{"name":"mysql-login-connector","config":{"connector.class":"io.confluent.connect.jdbc.JdbcSourceConnector","connection.url":"jdbc:mysql://localhost:3306/test","connection.user": "root","connection.password": "Admin","topic.prefix": "mysql-01-","mode":"bulk"}}

Docker Compose中Connect服务配置

connect:
  image: cnfldemos/cp-server-connect-datagen:0.6.4-7.6.0
  hostname: connect
  container_name: connect
  depends_on:
    - broker
    - schema-registry
  ports:
    - "8083:8083"
  environment:
    CONNECT_BOOTSTRAP_SERVERS: 'broker:29092'
    CONNECT_REST_ADVERTISED_HOST_NAME: connect
    CONNECT_GROUP_ID: compose-connect-group
    CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
    CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
    CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
    CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
    CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
    CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
    CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
    CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
    CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
    CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081
    # CLASSPATH required due to CC-2422
    CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.9.0.jar:/config/confluentinc-kafka-connect-jdbc-10.8.4/lib/mysql-connector-java-8.0.30.jar
    CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor"
    CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor"
    CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/usr/local/share/kafka/plugins,/usr/share/filestream-connectors,/config"
  volumes:
    - C:\Programs\cp-all-in-one\config:/config
问题原因及修复方案

核心问题

Connect运行在Docker容器内,配置里的localhost指向容器自身,而非你的宿主机。如果MySQL部署在宿主机上,容器自然无法通过localhost:3306连接到宿主机的MySQL服务。

具体修复步骤

  1. 修改JDBC连接URL

    • localhost替换成宿主机的实际IP地址(Windows用ipconfig查以太网IPv4,Linux/macOS用ip addrifconfig
    • 示例:jdbc:mysql://192.168.1.100:3306/test
    • 注意:不要用127.0.0.1,同样指向容器自身
  2. 开放MySQL远程访问权限

    • 登录MySQL执行授权命令,允许root用户从任意IP访问(或指定容器所在网段):
      GRANT ALL PRIVILEGES ON test.* TO 'root'@'%' IDENTIFIED BY 'Admin';
      FLUSH PRIVILEGES;
      
    • 修改MySQL配置文件(my.cnf/my.ini),将bind-address设为0.0.0.0,重启MySQL服务
  3. 验证连通性

    • 进入Connect容器测试端口是否开放:
      docker exec -it connect bash
      telnet 192.168.1.100 3306
      

可选方案(MySQL也在Docker中)

如果MySQL是Docker部署的,把它加入Confluent Platform的同一Docker网络,然后JDBC URL用MySQL容器名作为主机名,比如jdbc:mysql://mysql-container:3306/test

内容的提问来源于stack exchange,提问作者walruz

火山引擎 最新活动