当plugin.path具有逗号分隔值时,Kafka Connect引发ClassNotFoundException

时间:2019-07-18 10:53:01

标签: apache-kafka kafka-consumer-api apache-kafka-connect

我正在使用Kafka connect创建一个MQTT Kafka连接。我将从融合站点下载的所有特定于kafka MQTT连接器的jar放入“ / data”文件夹。并相应地更新“ connect-standalone.properties”文件以反映插件路径,即

plugin.path=/opt/kafka_2.11-2.1.1/libs,/data

当我运行Kafka Connect

./connect-standalone.sh ../config/connect-standalone.properties ../config/connect-mqtt-source.properties

我收到以下错误消息:

  

[2019-07-18 10:26:05,823]信息正在从以下位置加载插件:   /data/kafka-connect-mqtt-1.2.1.jar   (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:220)   [2019-07-18 10:26:05,829]错误由于错误而停止   (org.apache.kafka.connect.cli.ConnectStandalone:128)   java.lang.NoClassDefFoundError:   com / github / jcustenborder / kafka / connect / utils / VersionUtil           在io.confluent.connect.mqtt.MqttSourceConnector.version(MqttSourceConnector.java:29)           在org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.versionFor(DelegatingClassLoader.java:344)

截图如下: enter image description here

请注意,“ / data”文件夹中存在“ connect-utils-0.3.140.jar”,用红色下划线突出显示。

现在,如果我在下面制作软链接截图,或从“ / data”文件夹复制所有jar,然后将插件路径更新为:

plugin.path=/opt/kafka_2.11-2.1.1/libs

enter image description here

Kafka连接工作正常。

在第一种情况下为何不起作用的任何帮助,即不同文件夹中的kafka连接器特定的jars

1 个答案:

答案 0 :(得分:0)

来自Confluent页面上的Kafka Connect用户指南:

  

...

     

Kafka Connect将每个插件相互隔离,以使一个插件中的库不受任何其他插件中的库影响。当混合和匹配来自多个提供程序的连接器时,这一点非常重要。

     

Kafka Connect 插件是:

     
      
  1. 超级JAR ,在单个JAR文件中包含插件的所有类文件及其第三方依赖项;或
  2.   文件系统上的
  3. 一个目录,其中包含该插件的JAR文件及其第三方依赖项。
  4.   

在这种情况下,您必须将插件jar放在一个文件夹中,例如/data/pluginName 不能直接放在 /data/

更多详细信息可以在这里找到:Installing Plugins