canal与kafka的zkclient版本冲突
2017-01-19 00:00
344 查看
摘要: canal与kafka的zkclient版本冲突,导致canal客户端连接服务端时,报AbstractMethodError错误。
canal版本:1.0.22;kafka版本:0.8.2.1;客户端通过CanalConnectors.newClusterConnector(String zkServers, String destination, String username,String password)方法连接canal集群。
错误原因:canal依赖的zkclient版本为0.1;kafka依赖的zkclient版本为0.3;
0.3版本的zkclient在调用writeData方法时,会调用IZkConnection实现类ZooKeeperx(canal.common包)的writeDataReturnStat方法,而canal.client包因为是依赖0.1版本,ZooKeeperx并没有writeDataReturnStat方法。
所以当classloader加载的是0.3版本,调用writeData时,在ZooKeeperx类找不到writeDataReturnStat方法,报AbstractMethodError错误,最终导致连接canal服务端失败。
解决步骤:
canal父工程zkclient版本升级为0.3
ZooKeeperx(com.alibaba.otter.canal.common.zookeeper包下)实现writeDataReturnStat方法。
重新打canal.common包。完成,^_^
9553 [main] ERROR c.a.o.c.c.i.r.ClientRunningMonitor - There is an error when execute initRunning method, with destination [example]. java.lang.AbstractMethodError: com.alibaba.otter.canal.common.zookeeper.ZooKeeperx.writeDataReturnStat(Ljava/lang/String;[BI)Lorg/apache/zookeeper/data/Stat; at org.I0Itec.zkclient.ZkClient$10.call(ZkClient.java:817) ~[zkclient-0.3.jar:0.3] at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675) ~[zkclient-0.3.jar:0.3] at org.I0Itec.zkclient.ZkClient.writeDataReturnStat(ZkClient.java:813) ~[zkclient-0.3.jar:0.3] at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:808) ~[zkclient-0.3.jar:0.3] at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:777) ~[zkclient-0.3.jar:0.3] at com.alibaba.otter.canal.client.impl.running.ClientRunningMonitor.processActiveEnter(ClientRunningMonitor.java:215) [canal.client-1.0.22.jar:na] at com.alibaba.otter.canal.client.impl.running.ClientRunningMonitor.initRunning(ClientRunningMonitor.java:118) [canal.client-1.0.22.jar:na] at com.alibaba.otter.canal.client.impl.running.ClientRunningMonitor.start(ClientRunningMonitor.java:92) [canal.client-1.0.22.jar:na] at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.connect(SimpleCanalConnector.java:93) [canal.client-1.0.22.jar:na] at com.alibaba.otter.canal.client.impl.ClusterCanalConnector.connect(ClusterCanalConnector.java:63) [canal.client-1.0.22.jar:na] at com.alibaba.otter.canal.client.CanalConnector$connect.call(Unknown Source) [canal.client-1.0.22.jar:na]
canal版本:1.0.22;kafka版本:0.8.2.1;客户端通过CanalConnectors.newClusterConnector(String zkServers, String destination, String username,String password)方法连接canal集群。
错误原因:canal依赖的zkclient版本为0.1;kafka依赖的zkclient版本为0.3;
0.3版本的zkclient在调用writeData方法时,会调用IZkConnection实现类ZooKeeperx(canal.common包)的writeDataReturnStat方法,而canal.client包因为是依赖0.1版本,ZooKeeperx并没有writeDataReturnStat方法。
所以当classloader加载的是0.3版本,调用writeData时,在ZooKeeperx类找不到writeDataReturnStat方法,报AbstractMethodError错误,最终导致连接canal服务端失败。
解决步骤:
canal父工程zkclient版本升级为0.3
<dependency> <artifactId>zkclient</artifactId> <groupId>com.101tec</groupId> <version>0.3</version> <!-- <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> --> </dependency>
ZooKeeperx(com.alibaba.otter.canal.common.zookeeper包下)实现writeDataReturnStat方法。
@Override public Stat writeDataReturnStat(String path, byte[] data, int expectedVersion) throws KeeperException, InterruptedException { _zk.setData(path, data, expectedVersion); return _zk.exists(path, false); }
重新打canal.common包。完成,^_^
相关文章推荐
- canal与hbase的protobuf版本冲突
- EOS中的报表开发jxl版本冲突的解决
- Newsoft.Json版本冲突之解决
- 处理jquery版本之间冲突俟
- maven 工具的依赖树以及解决版本包冲突问题
- CentOS6.5下kafka+ZooKeeper下载与安装详细教程-多机版本2
- springMVC与tomcat的jdk版本冲突总结
- jdk版本冲突后,彻底删除JDK的方法
- angular编译版本冲突解决办法总结
- 利用JAVA中的endorsed技术解决jar包版本冲突的问题
- Windows平台搭建Kafka源代码开发环境(Eclipse版本)
- caffe框架和theano框架的所需cudnn的版本冲突问题
- github上的版本和本地版本冲突的解决方法
- Mac OS X 系统下多Jdk版本冲突解决
- MyEclipse2014 删除Struts2中的antlr2.7.2.jar,解决Struts2和Hibernate中的antlr版本冲突
- IIS asp.net 版本冲突解决办法
- Windows平台搭建Kafka源代码开发环境(Eclipse版本)
- 在ArchLinux上安装单机版本kafka
- 处理jquery版本之间冲突(转自www.jqueryba.com)
- kafka0.8--0.11各个版本特性预览介绍