暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

canal-adapter适配elasticsearch2.x和5.x版本

一粒菜鸟 2020-03-04
315


前言


适配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部分


图:dev.xml/release.xml


图:adapter工程pom.xml


图:launcher工程pom.xml




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


图:ESConnection.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打包即可


总结


因为是后续做的记录,适配过程中一些小细节记不太清楚了,如果适配过程中有问题可以私信我,最后,求一波转发、关注、和在看呀!



一粒菜鸟


程序猿非硬核技术文档和崩溃日常



我就知道你“在看”




文章转载自一粒菜鸟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论