kafka-connect-jdbc:SQLException:仅当使用分布式模式时,没有合适的驱动程序

时间:2018-11-15 14:32:48

标签: mysql jdbc apache-kafka apache-kafka-connect confluent

我们已成功使用mySQL-通过jdbc独立连接器获取kafka数据,但现在在分布式模式下(与kafka connect service一样)面临着问题。

connect-distributed.properties文件-

bootstrap.servers=IP1:9092,IP2:9092
group.id=connect-cluster
key.converter.schemas.enable=true
value.converter.schemas.enable=true
offset.storage.topic=connect-offsets
offset.storage.replication.factor=2
config.storage.topic=connect-configs
config.storage.replication.factor=2
status.storage.topic=connect-status
status.storage.replication.factor=2
offset.flush.interval.ms=10000
plugin.path=/usr/share/java,/usr/share/java/kafka-connect-jdbc

我的连接器罐在这里-

/usr/share/java/kafka-connect-jdbc

-rw-r--r-- 1 root root  906708 Jul 29 01:18 zookeeper-3.4.13.jar
-rw-r--r-- 1 root root   74798 Jul 29 01:18 zkclient-0.10.jar
-rw-r--r-- 1 root root 5575351 Jul 29 01:18 sqlite-jdbc-3.8.11.2.jar
-rw-r--r-- 1 root root   41203 Jul 29 01:18 slf4j-api-1.7.25.jar
-rw-r--r-- 1 root root  658466 Jul 29 01:18 postgresql-9.4-1206-jdbc41.jar
-rw-r--r-- 1 root root 1292696 Jul 29 01:18 netty-3.10.6.Final.jar
-rw-r--r-- 1 root root  489884 Jul 29 01:18 log4j-1.2.17.jar
-rw-r--r-- 1 root root  211219 Jul 29 01:18 kafka-connect-jdbc-5.0.0.jar
-rw-r--r-- 1 root root  317816 Jul 29 01:18 jtds-1.3.1.jar
-rw-r--r-- 1 root root   87325 Jul 29 01:18 jline-0.9.94.jar
-rw-r--r-- 1 root root   20844 Jul 29 01:18 common-utils-5.0.0.jar
-rw-r--r-- 1 root root   20437 Jul 29 01:18 audience-annotations-0.5.0.jar
-rw-r----- 1 root root 2132635 Nov 11 16:31 mysql-connector-java-8.0.13.jar

我可以通过以这种方式运行脚本来运行独立模式-

/usr/bin/connect-standalone /etc/kafka/connect-standalone.properties /etc/kafka-connect-jdbc/source-quickstart-mysql.properties

但是当我尝试调用REST API来运行分布式模式连接器时,出现错误:

curl -X POST -H "Accept:application/json" -H "Content-Type:application/json" X.X.X.X:8083/connectors/ -d '{"name": "linuxemp-connector", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "tasks.max": "1", "connection.url": "jdbc:mysql://Y.Y.Y.Y:3306/linux_db?user=groot&password=pwd","table.whitelist": "emp","mode": "timestamp","incrementing.column.name":"empid","topic.prefix": "mysqlconnector-" } }'

错误-

{"error_code":400,"message":"Connector configuration is invalid and contains the following 2 error(s):\nInvalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://Y.Y.Y.Y:3306/linux_db?user=groot&password=pwd for configuration Couldn't open connection to jdbc:mysql://Y.Y.Y.Y:3306/linux_db?user=groot&password=pwd\nInvalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://Y.Y.Y.Y:3306/linux_db?user=groot&password=pwd for configuration Couldn't open connection to jdbc:mysql://Y.Y.Y.Y:3306/linux_db?user=groot&password=pwd\nYou can also find the above list of errors at the endpoint `/{connectorType}/config/validate`"}

注意- 连接器jar放置在所有连接节点上,plugin.path在所有连接节点上相同,并且kafka-connect服务已启动并正在运行。

我想念什么?为什么我不能提交REST调用来启动此mysql管道的分布式connect worker /任务? 在独立模式下,这绝对可以正常工作。但是在分布式模式下会引发错误。

请帮助!

谢谢!

3 个答案:

答案 0 :(得分:0)

通过解决以下问题,问题得以解决-

1。将/usr/share/java/kafka-connect-jdbc/mysql-connector-java-8.0.13.jar的权限更改为755 2.在插件路径中仅保留/ usr / share / java。

3。更改我的sql表结构,使其具有一个具有递增性质或时间戳的主键和一个列属性。

答案 1 :(得分:0)

我解决了将CLASSPATH指定给驱动程序的问题,

CLASSPATH=/Users/christian/kafka/confluent-5.3.1/share/java/kafka-connect-jdbc/mysql-connector-java-8.0.18.jar connect-standalone.sh worker.properties etc/kafka-connect-jdbc/mysql-jdbc-fp.properties

答案 2 :(得分:0)

在使用confluent通过kafka连接到mysql databse时,我遇到了同样的问题。 我安装了ubuntu 16.04。以下是重要路径

1-/etc/kafka-所有必需的kafka属性文件,在这里您将找到connect-standalone和connect分布式属性文件,您可以对其进行编辑以加载插件。

2-{{​​1}}所有连接器均位于此处。

mysql连接器应位于/usr/share/java的jar文件中,该文件可以从here下载或检查其他版本。确保2点中提到的文件夹权限合适。

按照上述步骤操作后,请确保重新启动/usr/share/java/kafka-connect-jdbc/,在我的情况下为kafka。 我停止汇合了-confluent,然后confluent stop

以下是external resource帮助了我的情况。