Apache kafka Kafka Connect JDBC接收器连接器-java.sql.SQLException:未找到合适的驱动程序
我正试图在docker的帮助下,使用kafka debezium(kafka streaming)将表数据从一个DB下沉到另一个DB。 DB流工作正常。但将数据流传输到另一个MySQL DB进程时出错 对于我的连接器接收器配置,如下所示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
{
"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,那么您有三个选项
# 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.propertiesplugins.path
从未提及过。还有一件事,Initialio.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
文件夹中的问题