我就是bug届的扛把子呀~
借助google各种英文文献终于找到一个靠谱的,最欣喜的事莫过于google一个问题时看到绿色的对号!
虽然这篇参考没有对号,但借助二人的谈话,我终于知晓点门路了,把问题解决了,至于原因,我还需要进一步探查,随后补,先记录一下如何解决的。
症状:同时运行kafka-connect-mysql和kafka-connector-hbase(组内自己写的,目的是为了实现mysql-hbase)时报错如下,按照参考的来说应该其他的遇到此类问题也可参照解决方案。
命令:bin/connect-standalone etc/kafka/connect-standalone.properties etc/kafka-connect-hbase/hbase.properties etc/kafka-connect-binlog/binlog-source.properties
错误:
error Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator
原因:大概是运行kafka-connect-hbase时读取plugin.path时堵在那里了。
解决方案:修改confluent-3.3.0/etc/kafka下的connect-standalone.properties(运行distribute mode则修改connect-distribute.properties)中的plugin.path。我是直接简单粗暴的加了我的java的地址,虽然运行中会提示这里error([2017-11-21 19:50:21,739] ERROR Plugin class loader for connector: 'com.enn.connect.binlog.BinlogSourceConnector' was not found. Returning: org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader@6ec8211c (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:99)
),报的是mysql相关的,但单独调试时,mysql是可以的,hbase是会卡在这里,所以暂且忽略这个错误。最终整体可以运行了,所以我猜测kafka-connect-hbase是受阻了。待时间空余下来接着研究。
plugin.path的设置是为了保证classloader隔离
经过各种测试之后,发现这个问题还是需要解决guava问题,你只需要把pom文件中的所有依赖全都exclude guava就可以最终解决。
终极解决方案就是重新build guava了,把stopwatch修改为public权限。