elasticsearch java.lang.NoSuchMethodError:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
我一直在尝试使用kafka connect api将kafka连接到elasticsearch。kafka版本为0.11.0.0。以下是我遵循的步骤: 1.内置弹性搜索连接器: 2.构建连接器
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
$ 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
两种解决方案:
plugin.path
来使用类加载隔离,将允许连接器按原样工作,而不会干扰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