背景
最近工作上需要实现从mysql到hbase的实时数据
同步的功能。经过多方了解,整理出解决方案:使用
canal作为实时的数据源,然后开发一个client来完成与canal的对接,并将数据写入hbase数据库中。
问题
在开发接近尾声时,
发现连接canal时需要使用protobuf-java-2.4.1.jar包,而连接hbase时则需要使用protobuf-java-2.5.0.jar。并且两者jar包无法兼容,使用任何一个jar都无法正常启动程序。
解决思路
为了程序能够正常运行,需要同时加载两个jar包。但是我们都知道,一个
class在jvm
内存中只有一份。
1.首先想到的是将canal中的protobuf
版本升级至2.5.0,即修改canal源码使之使用2.5.0的jar包;
2.其次想到的合并2.4.1和2.5.0得到一个新的包,即比较2.4.1和2.5.0的不同之处,然后合并;
3.修改2.4.1中class的名字(通过修改package名)并重新打jar包,然后修改canal中引用到protobuf的地方并重新打jar包
事实证明第
三种方法可行性最高,简单、方面又实用。