卡夫卡连接 ftp
Kafka connect ftp
虽然 运行 kafka-connect-ftp 的连接器显示以下错误
Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:54)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:54)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:279)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:260)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:201)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.registerPlugin(DelegatingClassLoader.java:193)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:153)
at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:47)
at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:75)
我参考了两个社区网站,它们已经在 confluent connector 网站中给出
https://github.com/Eneco/kafka-connect-ftp
https://github.com/Landoop/stream-reactor
任何人都可以针对此错误提出解决方案。
此连接器有两个主要问题:
- 它捆绑了来自 Connect 的 API 的 class 及其依赖项。也就是说,它将 classes 捆绑在包
org.apache.kafka.connect
中。不建议这样做,此类依赖项应标记为已提供。
- 连接器因 class 加载问题而失败的实际原因是它依赖于(至少根据其
master
分支)可能不匹配的 Apache Kafka 版本已部署的 Connect worker 的版本。具体取决于 kafkaVersion = '0.10.2.0'
不是最新的。 Kafka Connect 在其提供 class 加载隔离的最新版本中,将忽略它认为系统 class 的内容,例如 org.apache.kafka.connect
中的 classes 当它们被连接器导入时' 罐子。相反,它将从 Apache Kafka 附带的 Kafka Connect jar 中加载此类 classes。
上述问题可能会导致 class 加载失败,如您所见。
理想情况下,它们应该在连接器级别解决。
您可以应用的解决方法是:
- 在升级它所依赖的 Kafka 版本后,从源代码构建连接器代码。同时将其 Kafka 依赖项标记为已提供(包括 Kafka Connect 和 Kafka Clients 依赖项)。或者,
- 降级您部署的 Kafka Connect 版本以与连接器当前依赖的版本完全匹配。
此处记录了类似的问题:
虽然 运行 kafka-connect-ftp 的连接器显示以下错误
Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:54)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
at java.net.URLClassLoader.run(URLClassLoader.java:368)
at java.net.URLClassLoader.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:54)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getConstructor0(Class.java:3075)
at java.lang.Class.newInstance(Class.java:412)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.getPluginDesc(DelegatingClassLoader.java:279)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:260)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:201)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.registerPlugin(DelegatingClassLoader.java:193)
at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:153)
at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:47)
at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:75)
我参考了两个社区网站,它们已经在 confluent connector 网站中给出 https://github.com/Eneco/kafka-connect-ftp https://github.com/Landoop/stream-reactor
任何人都可以针对此错误提出解决方案。
此连接器有两个主要问题:
- 它捆绑了来自 Connect 的 API 的 class 及其依赖项。也就是说,它将 classes 捆绑在包
org.apache.kafka.connect
中。不建议这样做,此类依赖项应标记为已提供。 - 连接器因 class 加载问题而失败的实际原因是它依赖于(至少根据其
master
分支)可能不匹配的 Apache Kafka 版本已部署的 Connect worker 的版本。具体取决于kafkaVersion = '0.10.2.0'
不是最新的。 Kafka Connect 在其提供 class 加载隔离的最新版本中,将忽略它认为系统 class 的内容,例如org.apache.kafka.connect
中的 classes 当它们被连接器导入时' 罐子。相反,它将从 Apache Kafka 附带的 Kafka Connect jar 中加载此类 classes。
上述问题可能会导致 class 加载失败,如您所见。
理想情况下,它们应该在连接器级别解决。
您可以应用的解决方法是:
- 在升级它所依赖的 Kafka 版本后,从源代码构建连接器代码。同时将其 Kafka 依赖项标记为已提供(包括 Kafka Connect 和 Kafka Clients 依赖项)。或者,
- 降级您部署的 Kafka Connect 版本以与连接器当前依赖的版本完全匹配。
此处记录了类似的问题: