无法使用 confluent CLI 设置 CLASSPATH:java.sql.SQLException:找不到适合 jdbc:oracle:thin 的驱动程序

Unable to set CLASSPATH with confluent CLI : java.sql.SQLException: No suitable driver found for jdbc:oracle:thin

我想在 confluent 上使用 JDBC 连接器。当我开始使用 Confluent CLI 连接时它不起作用。

confluent local start connect

它给出了这个错误:

Caused by: java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@10.10.10.10:1954/MYSERVICE

我停止连接并手动启动 connect-distributed 或独立它给出相同的错误

./bin/connect-distributed etc/schema-registry/connect-avro-distributed.properties

但是 when I set CLASSPATH 然后上面的代码工作正常并将数据传输到 Oracle。

export CLASSPATH=/home/my_confluent/confluent-5.4.1/share/java/kafka-connect-jdbc/ojdbc6.jar

但我仍然不能用 connect 服务做同样的事情。

当我 confluent connect

confluent local start connect

它给出了同样的错误。

JDBC 驱动程序需要与 JDBC 接收器连接器位于同一文件夹中。

因此,如果您的 JDBC 接收器连接器 (kafka-connect-jdbc-5.4.1.jar) 在 etc/kafka-connect-jdbc 中,则将 ojdbc6.jar 放入该文件夹中。

编辑:在此处放置 JDBC 驱动程序后,您必须重新启动 Kafka Connect worker。

我已经在这里写下并记录了整个过程的详细信息:https://rmoff.dev/fix-jdbc-driver

经过多次尝试,终于找到了解决办法。

我将 ojdbc6.jar 文件复制到 /home/ersin/confluent-5.4.1/share/java/kafka/ 文件夹中,然后重新启动连接服务,效果非常好。

供您参考

Confluent CLI 使用 Golang 在底层启动脚本,因此这可以解释为什么导出 Java 特定变量不起作用,但是,如果您 export CLASSPATH=/any/path/to/jdbc-drivers/*.jar,那么 运行 任何进程在同一个终端进程中,它应该继承那些变量。

confluent local start connect 内部调用一些 exec.command("connect-distributed") 函数,因此这是一个 Java 方法调用,即 运行 到 kafka-run-class.sh, which does inherit the CLASSPATH variable