Search code examples
debezium

ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed) java.lang.NoClassDefFoundError: io/debezium/util/IoUtil


Objective

I am trying to connect to my Oracle Database(12c) from Kafka Connect(ideally in distributed mode) using the Debezium connector(1.2.4.Final). The Kafka version i am using is 2.13-2.6.0.

Command used

As per mentioned here, i am running this command:

C:\Users\username\Downloads\kafka>bin\windows\connect-distributed.bat config\connect-distributed.properties

Error

The error i am getting is:

ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed) java.lang.NoClassDefFoundError: io/debezium/util/IoUtil at io.debezium.connector.oracle.Module.(Module.java:19) at io.debezium.connector.oracle.OracleConnector.version(OracleConnector.java:23) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:390) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:395) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:365) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:337) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:268) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.registerPlugin(DelegatingClassLoader.java:260) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initPluginLoader(DelegatingClassLoader.java:229) at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:206) at org.apache.kafka.connect.runtime.isolation.Plugins.(Plugins.java:61) at org.apache.kafka.connect.cli.ConnectDistributed.startConnect(ConnectDistributed.java:91) at org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:78) Caused by: java.lang.ClassNotFoundException: io.debezium.util.IoUtil at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:104) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 13 more

Settings

In my connect-distributed.properties, i have this:

plugin.path=C:/Users/username/Downloads/kafka/libs/debezium

And inside the debezium folder(following Gunnar's recommendation from the comment in this question), i have these jars: enter image description here

I also added the plugin path in %PATH% as follows:

echo %PATH% | findstr debezium

XXX;C:\Users\username\Downloads\kafka\libs\debezium;

Help

Any help would be greatly appreciated, as i hope to replace my database polling with this debezium connector which seems a better approach. Thanks!


Solution

  • The solution from Gunnar here works! (His explanation is there too if you want to check it out.)

    plugin.path=C:\\Users\\username\\Downloads\\kafka\\libs
    

    and that also works:

    plugin.path=C:/Users/username/Downloads/kafka/libs
    plugin.path=C:\Users\username\Downloads\kafka\libs
    plugin.path=/Users/username/Downloads/kafka/libs
    

    The mistake is: plugin.path should be up to libs and not libs/debezium