【问题标题】:Debezium oracle on confluent No suitable driver found for jdbc:oracle:ociDebezium oracle on confluent 找不到适合 jdbc:oracle:oci 的驱动程序
【发布时间】:2020-07-03 16:16:51
【问题描述】:

当我创建 kafka jdbc 源连接器(使用 confluent-5.4.0 的 oracle 的 debezium 连接器)时,出现错误“找不到适用于 jdbc:oracle:oci 的驱动程序...”。

[2020-03-23 11:49:44,521] ERROR WorkerSourceTask{id=debezium-souce-inventory-0} Task threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask:179)
org.apache.kafka.connect.errors.ConnectException: An exception ocurred in the change event producer. This connector will be stopped.
    at io.debezium.connector.base.ChangeEventQueue.throwProducerFailureIfPresent(ChangeEventQueue.java:170)
    at io.debezium.connector.base.ChangeEventQueue.poll(ChangeEventQueue.java:151)
    at io.debezium.connector.oracle.OracleConnectorTask.poll(OracleConnectorTask.java:110)
    at org.apache.kafka.connect.runtime.WorkerSourceTask.poll(WorkerSourceTask.java:265)
    at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:232)
    at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:177)
    at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:227)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:oracle:oci:@test:1521/testdb
    at io.debezium.relational.RelationalSnapshotChangeEventSource.execute(RelationalSnapshotChangeEventSource.java:179)
    at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:83)
    ... 5 more
Caused by: java.sql.SQLException: No suitable driver found for jdbc:oracle:oci:@test:1521/testdb
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at io.debezium.connector.oracle.OracleConnectionFactory.connect(OracleConnectionFactory.java:25)
    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:756)
    at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:751)
    at io.debezium.relational.RelationalSnapshotChangeEventSource.execute(RelationalSnapshotChangeEventSource.java:119)
    ... 6 more
[2020-03-23 11:49:44,521] ERROR WorkerSourceTask{id=debezium-souce-inventory-0} Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask:180)

我的 oracle 版本是 Enterprise Edition Release 11.2.0.4.0 - 64bit Production,我尝试了不同的驱动程序 jar,但得到了相同的异常。

我的jdk版本是:

[root@vtsz-big-dwh02 /]# echo $JAVA_HOME
/usr/java/jdk1.8.0_191

我已将 debezium-connector-oracle 添加到文件夹 confluent-5.4.0/share/java。

正如 Debezium 文档所说,我安装了即时客户端并将文件 _ojbc8.jar 和 xtreams.jar 从即时客户端复制到 Kafka 的库中

目录 (confluent-5.4.0/share/java/kafkaconfluent-5.4.0/share/java/kafka-connect-jdbc ,/opt/confluent-5.4.0/lib,/usr/share/java`)。

[root@vtsz-big-dwh02 java]# echo $LD_LIBRARY_PATH
/home/app/instantclient_11_2/:

我的源连接器配置是:

{
  "name": "debezium-souce-idea-inventory",
  "config": {
      "connector.class": "io.debezium.connector.oracle.OracleConnector",
      "tasks.max": "1",
      "database.server.name":"testdb",
      "database.out.server.name":"testdb",
      "database.hostname": "10.0.10.169",
      "database.port": "1521",
      "database.user": "mytest",
      "database.password": "mytest",
      "database.dbname" : "testdb",
      "table.whitelist": "ideas.WMS_INVENTORY",
      "database.history.kafka.bootstrap.servers":"localhost:9092",
      "database.history.kafka.topic":"schema-changes.inventory"
      }
 }

【问题讨论】:

    标签: oracle apache-kafka apache-kafka-connect debezium


    【解决方案1】:

    您需要将连接器(在本例中为 Debezium)所依赖的 JAR 文件放在与 连接器插件相同的文件夹(或子文件夹)中。

    所以不要把它们放进去

    confluent-5.4.0/share/java/kafka
    /opt/confluent-5.4.0/lib
    /usr/share/java
    confluent-5.4.0/share/java/kafka-connect-jdbc
    

    把它们放进去

    confluent-5.4.0/share/java/debezium-connector-oracle
    

    (或实际的 Debezium JAR 插件所在的位置)

    【讨论】:

    • 如您所说,我将 JAR 文件放入 Debezium JAR 插件所在的 confluent-5.4.0/share/java/debezium-connector-oracle 中,但出现相同的错误...跨度>
    • 你这样做后是否重启了worker?请注意,如果您在 Docker 上运行,那么当您重新启动容器时,对文件系统的任何更改都会丢失,因此您需要通过挂载卷或其他方法来添加 JAR
    • 这个答案对我有用,我通过修改 Debezium Dockerfile 将 JAR 永久放入,并将 JAR 复制到 ../debezium-connector-oracle 文件夹
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2012-12-09
    • 2016-04-02
    • 2019-03-08
    • 2013-03-16
    • 2013-07-04
    相关资源
    最近更新 更多