我一直在尝试使用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
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.(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.(Plugins.java:47)
at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:68)
无法理解出了什么问题.
根据经验,此错误意味着您将在类路径中提前使用旧版本的番石榴. Connect worker需要guava> = 20才能使org.reflections正常工作.
kafka-connect-elasticsearch或任何其他带有guava 18.0或更早版本的连接器将禁止工作人员启动.此错误消息表示在类路径中首先遇到较旧的guava jar.
两种解决方案
>实际上,正如Hans Jespersen所提到的,通过在Connect worker的配置中设置plugin.path来使用类加载隔离,将允许连接器按原样工作而不会干扰Connect框架.>如果将连接器添加到CLASSPATH是唯一的选项,请确保在Kafka Connect的依赖项之后添加它,以便拾取最新的番石榴.