java.lang.NoSuchMethodError:com.google.common.collect.Sets $ SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;

Ana*_*hak 4 elasticsearch apache-kafka confluent apache-kafka-connect

我一直在尝试使用kafka-connect api将kafka连接到elasticsearch.Kafka版本是0.11.0.0.这是我遵循的步骤:

1.Buiding Elasticsearch Connector:

https://github.com/confluentinc/kafka-connect-elasticsearch.git

2.建立连接器

$ cd kafka-connect-elasticsearch
$ mvn clean package
Run Code Online (Sandbox Code Playgroud)

3.最后运行脚本:

$ bin/connect-standalone.sh config/connect-standalone.properties config/elasticsearch-connect.properties
Run Code Online (Sandbox Code Playgroud)

它抛出以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
    at org.reflections.Reflections.expandSuperTypes(Reflections.java:380)
    at org.reflections.Reflections.<init>(Reflections.java:126)
    at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:221)
    at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:198)
    at org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:159)
    at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:47)
    at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:68)
Run Code Online (Sandbox Code Playgroud)

无法理解出了什么问题.

Kon*_*sis 5

根据经验,此错误意味着您将guava在类路径中引入较早版本的旧版本.连接工作者需要guava >= 20org.reflections正常工作.

kafka-connect-elasticsearch或带有它guava 18.0或更旧的任何其他连接器将禁止工人启动.此错误消息表示guava在类路径中首先遇到旧jar.

两种解决方案

  1. 实际上,正如Hans Jespersen所提到的,通过设置plugin.pathConnect worker的配置来使用类加载隔离,将允许连接器按原样工作而不会干扰Connect框架.
  2. 如果将连接器添加到CLASSPATH是唯一的选项,请确保在Kafka Connect的依赖项之后添加它,以便最新的guava选择.