canal-adapter适配elasticsearch 2.x和5.x版本

9 篇文章 0 订阅
6 篇文章 1 订阅

前言

适配elasticsearch不同版本的过程,是一个了解adapter整体架构的过程,但是同样也很想吐槽elasticsearch的版本间的不兼容问题,不过既然要用,就怂怂的接受好了。

适配

注:adapter使用版本为1.1.5-alpha
在1.1.5版本的adapter中es的同步,将不同大版本的es打成了不同的jar包,然后再通过配置文件去调用相应版本的包去同步数据,官方提供了es6和es7版本的同步,这样的话,我们就可以照葫芦画瓢的使用相同方式去处理es2和es5的同步了。
我们直接复制一份es6x的工程代码到同级目录,然后将其改成5x、2x,代码文件不多,将所有6x的文件名和代码部分统一改成5x、2x之后,咱们再慢慢解决版本之间的bug
在这里插入图片描述

canal工程结构涉及es部分如下,图中标注的部分,都是我们需要修改的,相信我,这些文件打开一看就知道该怎么改了,直接上图

工程涉及es部分:工程涉及es部分

dev.xml/release.xmldev.xml/release.xml

adapter工程pom.xmladapter工程pom.xml

launcher工程pom.xmllauncher工程pom.xml

然后将nX部分的pom文件中的elasticsearch的依赖替换成相应的版本,在做最小改动的基础上经过测试,es2.x和5.x统一使用transport方式进行同步,所以修改代码的时候,涉及mode的判断语句,我们只需要关注transport部分,rest部分的错误直接注释掉就可以。真正需要修改的代码其实只有连接这一部分

ESConnection.javaESConnection.java
修改为如下部分:

if (mode == ESClientMode.TRANSPORT) {
            Settings.Builder settingBuilder = Settings.builder();
            settingBuilder.put("cluster.name", properties.get("cluster.name"));
            Settings settings = settingBuilder.build();
            transportClient = TransportClient.builder().settings(settings)
    				.build();
            for (String host : hosts) {
                int i = host.indexOf(":");
                transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host.substring(0, i)),
                        Integer.parseInt(host.substring(i + 1))));
//                transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName(host.substring(0, i)),
//                    Integer.parseInt(host.substring(i + 1))));
            }
        }

修改完这部分,基本上就是把各种rest部分的错误注释掉就可以了,然后工程根目录mvn clean install -Denv=release打包即可

总结

因为是后续做的记录,适配过程中一些小细节记不太清楚了,如果适配过程中有问题可以随时沟通!
欢迎关注我的个人微信公众号,一个菜鸟程序猿的技术分享和奔溃日常

一个菜鸟程序猿的技术技术分享和奔溃日常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值