我一直在尝试使用kafka-connect api将kafka连接到elasticsearch.Kafka版本是0.11.0.0。这是我遵循的步骤:
1.Buiding Elasticsearch Connector:
https://github.com/confluentinc/kafka-connect-elasticsearch.git
2.建立连接器
import numpy as np
print(np.array2string(np.outer(np.arange(1, mystery_int+1),
np.arange(1, mystery_int+1)),
separator='\t'))
3.最后运行脚本:
$ cd kafka-connect-elasticsearch
$ mvn clean package
抛出以下异常:
$ bin/connect-standalone.sh config/connect-standalone.properties config/elasticsearch-connect.properties
无法理解出了什么问题。
答案 0 :(得分:5)
根据经验,此错误意味着您在类路径中提前使用较早版本的guava
。 Connect worker需要guava >= 20
org.reflections
才能正常工作。
kafka-connect-elasticsearch
或带有guava 18.0
或更早版本的任何其他连接器将禁止工作人员启动。此错误消息表示在类路径中首先遇到较旧的guava
jar。
两种解决方案:
plugin.path
来使用类加载隔离,将允许连接器按原样运行 而不会干扰Connect框架。guava
被选中。 答案 1 :(得分:2)
这似乎描述了您的问题的答案https://github.com/confluentinc/kafka-connect-elasticsearch/issues/104
这有点令人困惑,但在你构建连接器之后有一个 目标目录中的数量。该 kafka-connect-elasticsearch-.jar只是带有的JAR文件 连接器代码,但不包括所有库。之一 目标目录中的那些目录,即 目标/卡夫卡连接-elasticsearch - * - 开发/股/ JAVA /卡夫卡连接-elasticsearch /, 确实包含所有库。将此目录添加到Kafka 连接worker的类路径,或将所有这些JAR文件复制到一个 已存在于类路径中的目录。
答案 2 :(得分:0)
对于将来的读者,我遇到类似的问题,没有使用kafka。我花了很多时间试图找出问题所在,最后,我有了一个模式。
在我的项目中,我使用了ro.isdc.wro4j:wro4j-extensions:1.8.0和org.reflections:reflections:0.9.11
<dependency>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-extensions</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.11</version>
</dependency>
发生冲突的原因是ro.isdc.wro4j:wro4j-extensions:1.8.0使用了com.google.javascript:closure-compiler:jar:v20160315,我通过将com.google.javascript:closure-compiler:jar:v20160315从pom中排除来解决了这个问题。
<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>
但是,问题是依赖于构建的,我们不知道哪个jar可能导致冲突。在这种情况下,您需要通过运行以下内容来了解jar的位置:
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
希望,答案将帮助您找到解决问题的方法,
Mughrabi
答案 3 :(得分:0)
最近(2020年1月),我在本地主机(macOS Catalina)上遇到了此错误,并且能够通过更新.zprofile
文件(zsh shell)来解决此错误。如果您有bash shell,则可以更改.bash_profile
或.bashrc
文件。
•引起错误是因为我的jvm.classpath包含guava
版本的依赖项<20。我的.zprofile
文件已导出到hadoop-3.1.1
和apache-hive-3.1.1
,这是问题所在错误。
•我正在使用kafka_2.12-2.0.0
。因此,我只是在hadoop-3.1.1
中评论了apache-hive-3.1.1
和.zprofile
,并成功运行了我的twitter kafka连接器。
•通过遵循@Konstantine Karantasis在thread中的注释,我能够跟踪此错误。
希望这会有所帮助。