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

news/2024/7/7 6:34:46 标签: java, mysql, elasticsearch

前言

适配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.<a class=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打包即可

总结

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

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


http://www.niftyadmin.cn/n/1040186.html

相关文章

X.500 Distinguished Names

X.500 Distinguished Names被用来标识一个实体&#xff0c;例如那些用主题和发行者&#xff08;签名者&#xff09;来命名的X.509证书领域。keytool支持如下部分&#xff1a; commonName — 一个人的普通名字&#xff0c;例如&#xff1a;“Susan Jones”organicationUnit — …

什么是 SSL 证书?如何检查网址是否部署了 SSL 证书?

原文地址&#xff1a;http://www.wosign.com/FAQ/how_to_Check_SSL.htm 您之所以能使用https://来访问此网站&#xff0c;就表示此网站是部属了SSL证书。一般来讲&#xff0c;如果此网站部属了SSL证书&#xff0c;则在需要加密的页面会自动从http://变为https://&#xff0c;如…

90+高分拿下阿里云acp认证,附完整备考流程和考试资料

前言 断更许久回归&#xff0c;前段时间除了工作任务比较多以外&#xff0c;其余时间都用来准备阿里云的acp认证了&#xff0c;如今证书到手&#xff0c;正式回归正常更新节奏。今天先来给大家分享一下我备考acp认证的一些经验和资料&#xff0c;希望可以帮助到有兴趣的小伙伴…

canal-adapter从数据库读取配置代码解析及改造

前言 从canal-adapter文档我们可以知道&#xff0c;其实adapter本身是有从数据库读取配置的功能的&#xff0c;但是文档中只是简单的提了一句&#xff0c;本文就从代码入手&#xff0c;带大家看看adapter从数据库读取配置这部分的功能是如何实现以及应该如何去使用它。 代码详…

k8s环境下prometheus监控canal实践

前言 使用prometheus监控canal的方法官方文档上已经介绍的很详细了&#xff0c;这里主要是介绍一下在k8s环境下&#xff0c;prometheus通过pod的服务发现&#xff0c;自动添加对新增的canal-server实例的监控 操作 canal-server的容器化教程在前面文章中已经详细介绍过了&am…

十一月技术指标

一.linux系统原有分区/data 有数据&#xff0c;再不格式化/data分区的情况下重装系统。1.先将系统映像或者光盘插入我们要安装的服务器中&#xff0c;这里以centos6.5 64位为例&#xff0c;进去到系统的安装界面&#xff1a;2.在选择分区这里我们选择自定义分区&#xff1a;3.根…

shell脚本攻略

“没有绝世神功” —— Frederick Brooks什么是shell&#xff1f; unix是最伟大的操作系统之一&#xff0c;这一架构其中最令人向往的地方莫过于命令行界面,简单来说&#xff0c;这种使用户能与操作系统进行交互的命令行界面我们便把他称之为shell,编写脚本通常使用基于某种解释…

k8s环境下搭建prometheus

前言 啥都不说&#xff0c;直接开造&#xff01; 开造 首先在k8s集群创建命名空间monitoring kubectl create namespace monitoring服务账户(prometheus-sa.yaml) apiVersion: v1 kind: ServiceAccount metadata:name: prometheusnamespace: monitoring集群角色(prometheu…