Kafka Connect启动失败。

7
我安装了Kafka Confluent OSS 4.0在CentOS 7系统上,但是Kafka Connect启动失败了。
复现步骤:
 - Install Oracle JDK 8
 - Copy confluent-4.0.0 folder on opt/confluent-4.0.0
 - Run /opt/confluent-4.0.0/confluent start

结果:

Starting zookeeper
zookeeper is [UP]
Starting kafka
kafka is [UP]
Starting schema-registry
schema-registry is [UP]
Starting kafka-rest
kafka-rest is [UP]
Starting connect
\Kafka Connect failed to start
connect is [DOWN]

错误日志 (connect.stderr) :

Exception in thread "main" java.lang.NoClassDefFoundError: io/confluent/connect/storage/StorageSinkConnectorConfig
        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.ConnectDistributed.main(ConnectDistributed.java:70)
Caused by: java.lang.ClassNotFoundException: io.confluent.connect.storage.StorageSinkConnectorConfig
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:62)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 22 more

附加信息:

Java版本:

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode

Centos版本:

centos-release-7-4.1708.el7.centos.x86_64

[编辑:2017年11月30日] 在每个属性文件中编辑plugin.path变量并没有解决问题。

包含“plugin.path”变量的文件列表:

./etc/schema-registry/connect-avro-distributed.properties:84:plugin.path=/opt/confluent-4.0.0/share/java
./etc/schema-registry/connect-avro-standalone.properties:51:plugin.path=/opt/confluent-4.0.0/share/java
./etc/kafka/connect-distributed.properties:95:plugin.path=/opt/confluent-4.0.0/share/java
./etc/kafka/connect-standalone.properties:50:plugin.path=/opt/confluent-4.0.0/share/java
2个回答

17

使用Confluent 4.0.0,plugin.path启用了与Kafka Connect的类加载隔离。

当您从debrpm软件包安装Confluent Platform时,默认的plugin.path位置是预先知道的。

但是,当您从Confluent平台的ziptar.gz存档文件下载和解压缩到文件系统中的某个位置时,plugin.path设置为:

plugin.path=share/java

这是一个相对路径,因为当您将Confluent平台作为存档文件(ziptar.gz)下载时,不知道您要提取存档文件的位置(例如,上面的示例中它是/opt/confluent-4.0.0/)。

如果您从提取Confluent平台的目录运行CLI或Connect的bin脚本,则可以猜测此位置:

例如,在上面的示例中:

cd /opt/confluent-4.0.0

./bin/confluent start

为了使您能够从文件系统中的任何目录启动Connect,并且Confluent Platform的bin目录在您的PATH中,您需要将属性plugin.path设置为插件的绝对路径位置:

要使用Confluent CLI,请编辑:

etc/schema-registry/connect-avro-distributed.properties

并相应地设置plugin.path(例如:plugin.path=/opt/confluent-4.0.0/share/java

对于常规的bin脚本,请编辑:

./etc/kafka/connect-distributed.properties

./etc/kafka/connect-standalone.properties

并将您的plugin.path设置为上述内容(在您的示例中为:plugin.path=/opt/confluent-4.0.0/share/java)。


感谢您的时间和回答。我编辑了./etc中的所有属性文件,销毁了confluent实例,并使用./bin/confluent start重新启动了一切,但是没有任何改变,所有服务都正常运行,但连接仍然无法正常工作并显示相同的错误。 - Dev
列出所有具有 plugin.path 的文件: ./etc/schema-registry/connect-avro-distributed.properties:84:plugin.path=/opt/confluent-4.0.0/share/java./etc/schema-registry/connect-avro-standalone.properties:51:plugin.path=/opt/confluent-4.0.0/share/java./etc/kafka/connect-distributed.properties:95:plugin.path=/opt/confluent-4.0.0/share/java./etc/kafka/connect-standalone.properties:50:plugin.path=/opt/confluent-4.0.0/share/java - Dev
share/java/kafka-connect-s3/storage-common 目录下是否存在一个指向 ../kafka-connect-storage-common 的符号链接,且该链接是否有效?在 kafka-connect-hdfs 中也应该存在类似的链接。 - Konstantine Karantasis

1
鉴于您使用了tar安装(而不是Docker镜像方法)。长话短说,您需要在Confluent分发中,例如confluent-6.1.0中。如截图所示,当您在根目录下运行命令confluent local services start时,连接失败。之后的任何操作(例如ksqlDB、Control Center等)都没有机会启动。当您在confluent-6.1.0内运行相同的命令时,一切都能正常工作。Not Working Vs. Working

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接