前言

适配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打包即可

总结

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

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

GitHub 加速计划 / ca / canal
53
10
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:4 个月前 )
8a4199a7 * 1. Fix compressed OSS binlog data 2. Fix first second data loss caused by dumping from OSS binlog * Fix CI failed test cases 21 天前
79338be0 - String.format is lower than StringBuilder. Benchmark like below: code snippet: String str = String.format("%s-%s-%s", 0, 1, 10); Benchmark Mode Cnt Score Error Units StringBenchmark.append thrpt 46431458.255 ops/s StringBenchmark.format thrpt 985724.313 ops/s StringBenchmark.append avgt ≈ 10⁻⁸ s/op StringBenchmark.format avgt ≈ 10⁻⁶ s/op StringBenchmark.append sample 364232 ≈ 10⁻⁷ s/op StringBenchmark.append:p0.00 sample ≈ 10⁻⁸ s/op StringBenchmark.append:p0.50 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.90 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.95 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.99 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.999 sample ≈ 10⁻⁷ s/op StringBenchmark.append:p0.9999 sample ≈ 10⁻⁵ s/op StringBenchmark.append:p1.00 sample 0.001 s/op StringBenchmark.format sample 336220 ≈ 10⁻⁶ s/op StringBenchmark.format:p0.00 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.50 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.90 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.95 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.99 sample ≈ 10⁻⁶ s/op StringBenchmark.format:p0.999 sample ≈ 10⁻⁵ s/op StringBenchmark.format:p0.9999 sample ≈ 10⁻⁴ s/op StringBenchmark.format:p1.00 sample 0.001 s/op StringBenchmark.append ss ≈ 10⁻⁶ s/op StringBenchmark.format ss ≈ 10⁻⁵ s/op 21 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐