elasticsearch java.lang.NoSuchMethodError:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;,elasticsearch,apache-kafka,apache-kafka-connect,confluent-platform,elasticsearch,Apache Kafka,Apache Kafka Connect,Confluent Platform" /> elasticsearch java.lang.NoSuchMethodError:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;,elasticsearch,apache-kafka,apache-kafka-connect,confluent-platform,elasticsearch,Apache Kafka,Apache Kafka Connect,Confluent Platform" />

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

elasticsearch java.lang.NoSuchMethodError:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;,elasticsearch,apache-kafka,apache-kafka-connect,confluent-platform,elasticsearch,Apache Kafka,Apache Kafka Connect,Confluent Platform,我一直在尝试使用kafka connect api将kafka连接到elasticsearch。kafka版本为0.11.0.0。以下是我遵循的步骤: 1.内置弹性搜索连接器: 2.构建连接器 $ cd kafka-connect-elasticsearch $ mvn clean package 3.最后运行脚本: $ bin/connect-standalone.sh config/connect-standalone.properties config/elasticsearch-co

我一直在尝试使用kafka connect api将kafka连接到elasticsearch。kafka版本为0.11.0.0。以下是我遵循的步骤:

1.内置弹性搜索连接器:

2.构建连接器

$ cd kafka-connect-elasticsearch
$ mvn clean package
3.最后运行脚本:

$ bin/connect-standalone.sh config/connect-standalone.properties config/elasticsearch-connect.properties
它引发以下异常:

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)
线程“main”java.lang.NoSuchMethodError中出现异常:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator; 位于org.reflections.reflections.expandSuperTypes(reflections.java:380) 位于org.reflections.reflections.(reflections.java:126) 位于org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanPluginPath(DelegatingClassLoader.java:221) 位于org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.scanUrlsAndAddPlugins(DelegatingClassLoader.java:198) 位于org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader.initLoaders(DelegatingClassLoader.java:159) 位于org.apache.kafka.connect.runtime.isolation.Plugins.(Plugins.java:47) 位于org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:68)
无法理解出了什么问题。

这似乎描述了问题的答案

这有点令人困惑,但在构建连接器之后,会出现 目标目录中的内容数。这个 kafka connect elasticsearch-.jar是唯一具有 连接器代码,但不包括所有库。什么之中的一个 目标目录中的那些目录,即 target/kafka connect elasticsearch-*-development/share/java/kafka connect elasticsearch/, 包含所有库。将此目录添加到卡夫卡 连接工作者的类路径,或将所有这些JAR文件复制到 已在类路径上的目录


根据经验,此错误意味着您在类路径的前面引入了较旧版本的
guava
。Connect worker要求
guava>=20
才能使
org.reflections
正常工作

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

两种解决方案:

  • 事实上,如前所述,通过在Connect worker的配置中设置
    plugin.path
    来使用类加载隔离,将允许连接器按原样工作,而不会干扰Connect框架
  • 如果将连接器添加到类路径是您唯一的选择,请确保它是在Kafka Connect的依赖项之后添加的,以便拾取最新的
    guava

    对于未来的读者,我有一个类似的问题,没有卡夫卡的用法。我花了很多时间试图解决这个问题,最后,我有了一个模式

    在我的项目中,我使用

    看看输出是什么。在我的例子中,输出是

    file:/tmp/jetty-0.0.0.0-8087-ROOT.war-_-any-1541284168668078443.dir/webapp/WEB-INF/lib/closure-compiler-v20160315.jar
    
    希望答案能帮助你找到解决问题的方法


    Mughrabi

    我最近(2020年1月)在本地主机(macOS Catalina)上遇到了这个错误,并通过更新我的
    .zprofile
    文件(zsh shell)解决了这个问题。如果您有bashshell,则可以对
    .bash\u profile
    .bashrc
    文件进行更改

    •导致错误的原因是我的jvm.classpath包含
    guava
    verison<20的依赖项。我的
    .zprofile
    文件已导出到
    hadoop-3.1.1
    apache-hive-3.1.1
    ,这是出现错误的原因

    •我正在使用卡夫卡2.12-2.0.0。因此,我刚刚在我的
    .zprofile
    中评论了
    hadoop-3.1.1
    &
    apache-hive-3.1.1
    ,并成功运行了我的twitter-kafka连接器

    •我根据@Konstantine Karantasis在本文中的评论追踪到了这一错误


    希望这会有所帮助。

    也许可以尝试安装Confluent开源发行版,其中包括0.11和Elasticsearch连接器,并遵循此处的快速启动。我已经完成了全部代码,没有使用Confluent,现在切换它不是我计划的。没有解决方案吗?这只是一个帮助您的建议确定问题是您的设置、构建环境还是汇流ES连接器本身。0.11添加了类路径隔离,因此您可能没有plugin.path中列出的所有必需依赖项。看见
    <dependency>
        <groupId>ro.isdc.wro4j</groupId>
        <artifactId>wro4j-extensions</artifactId>
        <version>1.8.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.javascript</groupId>
                <artifactId>closure-compiler</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.11</version>
    </dependency>
    
    CodeSource source = com.google.common.collect.Sets.class.getProtectionDomain().getCodeSource();
    if(source != null)
        logger.warn(source.getLocation().toString());
    
    file:/tmp/jetty-0.0.0.0-8087-ROOT.war-_-any-1541284168668078443.dir/webapp/WEB-INF/lib/closure-compiler-v20160315.jar