Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka Connect JDBC接收器连接器-java.sql.SQLException:未找到合适的驱动程序_Apache Kafka_Apache Kafka Connect_Confluent Platform - Fatal编程技术网

Apache kafka Kafka Connect JDBC接收器连接器-java.sql.SQLException:未找到合适的驱动程序

Apache kafka Kafka Connect JDBC接收器连接器-java.sql.SQLException:未找到合适的驱动程序,apache-kafka,apache-kafka-connect,confluent-platform,Apache Kafka,Apache Kafka Connect,Confluent Platform,我正试图在docker的帮助下,使用kafka debezium(kafka streaming)将表数据从一个DB下沉到另一个DB。 DB流工作正常。但将数据流传输到另一个MySQL DB进程时出错 对于我的连接器接收器配置,如下所示 { "name": "mysql_sink", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", "topics": "mysql

我正试图在docker的帮助下,使用kafka debezium(kafka streaming)将表数据从一个DB下沉到另一个DB。 DB流工作正常。但将数据流传输到另一个MySQL DB进程时出错

对于我的连接器接收器配置,如下所示

 {
  "name": "mysql_sink",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "topics": "mysql-connect.kafka_test.employee",
    "connection.url": "jdbc:mysql://localhost/kafka_test_1&user=debezium&password=xxxxx",
    "auto.create": "true",
    "auto.evolve": "true",
    "insert.mode": "upsert",
    "pk.fields": "id",
    "pk.mode": "record_value",
    "errors.tolerance": "all",
    "errors.log.enable":"true",
    "errors.log.include.messages":"true",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "key.converter.schemas.enable": "false",
    "value.converter.schemas.enable": "false",
    "name": "mysql_sink"
  }
}
但我有个错误

org.apache.kafka.connect.errors.ConnectException: Exiting WorkerSinkTask due to unrecoverable exception.
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:560)
org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:321)
org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:224)
org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:192)
org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175)
org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)\nCaused by: org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/kafka_test_1&user=debezium&password=xxxxx
io.confluent.connect.jdbc.util.CachedConnectionProvider.getValidConnection(CachedConnectionProvider.java:59)
io.confluent.connect.jdbc.sink.JdbcDbWriter.write(JdbcDbWriter.java:52)
io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:66)
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:538)\n\t... 10 more\nCaused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/kafka_test_1&user=debezium&password=xxxxx
java.sql.DriverManager.getConnection(DriverManager.java:689)
java.sql.DriverManager.getConnection(DriverManager.java:247)
io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:66)
io.confluent.connect.jdbc.util.CachedConnectionProvider.getValidConnection(CachedConnectionProvider.java:52)\n\t... 13 more
我在用docker

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
     - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    command: [start-kafka.sh]
    ports:
     - "9092:9092"
    links:
     - zookeeper
    environment:
      KAFKA_LISTENERS: PLAINTEXT://:9092,
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
  connect:
    build:
      context: debezium-jdbc
    ports:
     - "8083:8083"
    links:
     - kafka
    environment:
      BOOTSTRAP_SERVERS: kafka:9092
      GROUP_ID: 1
      CONFIG_STORAGE_TOPIC: my_connect_configs
      OFFSET_STORAGE_TOPIC: my_connect_offsets
      CLASSPATH: /kafka/connect/kafka-connect-jdbc-5.3.1.jar
我尝试了很多东西,我不知道为什么会出现这个错误,还有一件事我对java一无所知


提前感谢。

您会遇到此错误,因为JDBCSink(和JDBCSource)连接器使用JDBC(顾名思义)连接到数据库,而您尚未使JDBC MySQL驱动程序可用于连接器

解决此问题的最佳方法是将MySQL JDBC驱动程序复制到与
kafka connect JDBC
相同的文件夹中(Docker映像上的文件夹是
/usr/share/java/kafka connect JDBC/

如果您使用的是Docker Compose,那么您有三个选项

  • 在安装驱动程序的情况下构建自定义Docker映像

  • 本地下载驱动程序

    # Download to host machine
    mkdir local-jdbc-drivers
    cd local-jdbc-drivers
    curl https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-8.0.18.tar.gz | tar xz 
    
    并将其装载到容器中,进入Kafka Connect JDBC的路径:

    volumes:
      - ${PWD}/local-jdbc-drivers:/usr/share/java/kafka-connect-jdbc/driver-jars/
    
  • 在运行时按如下方式安装:

    command: 
      - /bin/bash
      - -c 
      - |
        # JDBC Drivers
        # ------------
        # MySQL
        cd /usr/share/java/kafka-connect-jdbc/
        curl https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-8.0.18.tar.gz | tar xz 
        # Now launch Kafka Connect
        sleep infinity &
        /etc/confluent/docker/run 
    

  • 有关更多详细信息,请参阅。

    在尝试使用kafka connect加载mysql表时,我一直在努力处理相同的错误
    未找到合适的驱动程序

    我正在使用kakfa(非汇合平台),发现您可能有两个问题:

    • jdbc url格式不正确
    • 为你的卡夫卡选择的司机不合适
    我使用了最新的驱动程序mysql-connector-java-8.0.21,收到了无合适的驱动程序错误。然而,当我切换到版本
    mysql-connector-java-5.1.49
    (于2020年发布)时,一切都很顺利

    您可以从maven repo获得驱动程序版本:


    将驱动程序复制到类路径,在我的例子中,如果下载了kafka并复制到
    kafka_2.12-2.3.1/libs/
    目录中,则相关错误:“原因:java.sql.SQLException:未找到适合jdbc的驱动程序:mysql://localhost/kafka_test_1&user=debezium&password=xxxxx",换句话说,类路径上没有MySQL Connector/J驱动程序,或者驱动程序没有加载
    plugins.path
    server.properties
    文件中的配置是什么?@giorgosmyriantous我在这里检查了server.properties
    plugins.path
    从未提及过。还有一件事,Initial
    io.debezium.connector.mysql.MySqlConnector
    工作正常。但是
    io.confluent.connect.jdbc.JdbcSinkConnector
    只得到了一个错误。@MarkrotVeel在将Kafka数据流传输到MySQL数据库时,我遇到了这个问题
    io.debezium.connector.mysql.MySqlConnector
    工作正常。此问题重复,但链接到的答案没有帮助。我已经投票决定重新打开它,同时我可以推荐在中给出的有关此错误的详细信息。感谢您的解决方案。我会检查并回复你。我尝试了这一步,但仍然出现错误。我正在使用docker并将数据接收到外部MySQL数据库。如果可能,请检查连接URL?我在初始步骤中使用的
    io.debezium.connector.mysql.MySqlConnector
    的URL也在运行。连接时,
    io.confluent.connect.jdbc.JdbcSinkConnector
    只收到一个错误。您如何在Docker中运行它?你能编辑你的问题来显示Docker Compose的完整配置吗?我签入了加载的插件并且所有的插件都加载了。我有一个问题可能是错误将出现两件事一是插件未加载另一件事在JDBC URL中被错误指定。我使用相同的主机名、用户和密码,因为只有DB名称不同。无论如何都要调试数据库连接。谢谢。这不是关于加载插件的问题,而是关于MySQL JDBC驱动程序JAR在
    kafka connect JDBC
    文件夹中的问题