卡夫卡连接 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

任何人都可以针对此错误提出解决方案。

此连接器有两个主要问题:

  1. 它捆绑了来自 Connect 的 API 的 class 及其依赖项。也就是说,它将 classes 捆绑在包 org.apache.kafka.connect 中。不建议这样做,此类依赖项应标记​​为已提供。
  2. 连接器因 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 版本以与连接器当前依赖的版本完全匹配。

此处记录了类似的问题: