Kafka连接ftp

时间:2018-01-16 08:31:11

标签: ftp apache-kafka connector confluent

在运行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.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.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.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.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)

我已经提到了两个社区网站,该网站已在汇合连接器网站中提供 https://github.com/Eneco/kafka-connect-ftp https://github.com/Landoop/stream-reactor

任何人都请为此错误提出解决方案。

1 个答案:

答案 0 :(得分:0)

此连接器存在两个主要问题:

  1. 它与Connect的API捆绑连接及其依赖项。例如。包org.apache.kafka.connect中的类。不建议这样做,并且应将此类依赖关系标记为已提供。
  2. 连接器因类加载问题而失败的实际原因是它依赖于(至少根据其master分支)Apache Kafka版本可能与部署的Connect工作者的版本不匹配。具体来说,它取决于kafkaVersion = '0.10.2.0',这不是最新的。 Kafka Connect在其最近提供类加载隔离的版本中,将忽略它所考虑的系统类,例如org.apache.kafka.connect中的类,当它们被连接器的jar导入时。相反,它将从Apache Kafka附带的Kafka Connect罐中加载这些类。
  3. 上述问题可能会导致类加载失败,就像您观察到的那样。

    理想情况下,它们应在连接器级别进行寻址。

    您可能适用的解决方法是:

    • 从源代码构建连接器代码,升级后依赖于Kafka版本,并标记其提供的Kafka依赖项(包括Kafka Connect和Kafka Clients依赖项)。或者,
    • 降级已部署的Kafka Connect版本,使其与连接器当前所依赖的版本完全匹配。

    此处记录了类似的问题: kafka mongodb sink connector not starting