首页 > 其他分享 >一镜到底 ElasticSearch 数据迁移同步技术

一镜到底 ElasticSearch 数据迁移同步技术

时间:2023-11-03 12:44:18浏览次数:32  
标签:同步 CloudCanal mapping Elasticsearch ElasticSearch 迁移 数据 一镜

简介

CloudCanal 对于 Elasticsearch 的支持经历了很多轮迭代,版本一路从 6.x,7.x 支持到 8.x 版本,也适配了其纷繁多样的 API。

因为 Elasticsearch 是一个相当流行的、实时的、并且具备一定不可替代能力的搜索引擎,所以很有必要对比下市面上我们能够比较容易获得的、免费的数据迁移同步工具,让大家落地实时数据搜索和分析更加有信心。

本文即从一个比较窄但是应用广泛的场景 - MySQL 到 Elasticsearch 数据同步技术 - 切入,比较不同技术的优劣和相关技术细节,最后给到一些展望。

Elasticsearch 数据迁移同步技术对比

目前能够比较容易获得的、免费的、并且有一定应用范围的数据迁移同步工具有:Logstash 和 FlinkCDC,CloudCanal 也算其中之一。

一些对比如下表(如有错误,可联系笔者进行修改)。

Logstash FlinkCDC CloudCanal
产品化 基础 基础 完备
高可用
任务创建 配置文件 配置文件 + 代码 可视化
监控告警 基础 基础 完备
索引(结构)迁移
全量迁移
实时同步
数据校验
索引结构同步(DDL) 有限(加列)
索引定义依赖
数据源插件(原厂) 一般 一般 丰富
数据源插件(社区) 丰富 一般
供应商 原厂 第三方 第三方
获取方式 开源 开源 免费社区版

综合来看,各个产品各有特点,并且有自己的局限性。

Logstash 和 FlinkCDC 更多偏向社区,但是他们背后庞大的商业产品体系(分别对应 ElasticSearch 和 阿里云 MaxCompute & Dataworks)注定两者定位仅仅是支撑工具。

CloudCanal 更加偏商业化些,但是背后公司以此谋生。

CloudCanal Elasticsearch 迁移同步技术介绍

基于 index mapping(索引结构)

因为 CloudCanal 最初支持从结构化数据库 - MySQL、Postgres、TiDB 等迁移同步数据到 Elasticsearch ,所以采用基于 mapping 方式构建目标数据。

具体展开,即在迁移同步数据到 Elasticsearch 前,CloudCanal 读取源端表结构,自动生成对应的 Elasticsearch 映射定义,并在对端创建,即结构迁移。

全量迁移和增量同步中,CloudCanal 会强依赖目标端的 mapping 结构进行数据构建。

基于 index mapping 方式构建目标数据带来的额外好处是:在 Elasticseach 上保持源端所有字段高速可查特性,叠加其对字符串字段基于倒排索引所带来的模糊查询能力。

处理 mapping 的变化 (DDL)

在关系型数据库同步到 Elasticsearch 过程中,源端表结构可能会动态变更,例如添加新字段等 DDL 操作。

对于 index 的 dynamic 参数设置为 false 后,Elasticsearch 将无法自动更新该结构变更,这将导致新的字段数据无法基于索引进行检索。

为了解决这一问题,CloudCanal 支持同步源端 DDL 加列的变更操作 - DDL 语句转换成 Elasticsearch 操作,动态更新到 index 的 mapping 中。

动态更新 mapping 的好处在于:

  • 保证两端结构一致,满足业务的动态变更需求
  • 无需用户手动干预构建索引,方便用户直接利用最新字段进行查询分析
  • 有效弥补了 Elasticsearch 映射静态的限制

客户端 API 选择与得失

CloudCanal 依赖 Elasticsearch Java SDK 进行结构和数据操作,没有使用其基础 REST API 进行新的封装和调用。

这样做带来的好处是更少的工作量和更好的性能,坏处是 Java SDK 随着 Elasticsearch 版本升级变化极大,导致 CloudCanal 需要做较多的驱动隔离工作。

从 CloudCanal 架构设计原则上来看 - 不直接依赖开源/商业的业务组件,依赖数据库官方驱动 - 我们应该做了正确的事情。

CloudCanal Elasticsearch 数据迁移同步展望

丰富源端数据源

目前 CloudCanal 支持 MySQL (或 MySQL 包装产品)、Postgres、TiDB、Kafka 同步到 Elasticsearch。

后续支持更多的源端数据源是一项非常重要的工作,且不仅限于结构化数据源,更有半结构化(mongodb)、非结构化数据源(redis、text file 等)作为源端的迁移同步,而后者对于基于 index mapping 的数据迁移同步带来很大的挑战。

Elasticsearch 源端数据同步

CloudCanal 尚未实现对 Elasticsearch 进行源端数据同步功能,但是我们收到了蛮多社区用户和商业用户此类需求。

当前类似 Logstash 实现的也仅仅是全量数据迁移(使用 logstash-input-elasticsearch 插件),增量同步尚无合适方案,基于 trigger(如有)或定时基于时间戳增量扫描可能是解决方式。

基于 store 构建目标数据

CloudCanal 后续将支持基于 store 构建目标数据,即直接将 doc 写入目标端的存储文件中,不再依赖索引的 mapping 结构。

基于 store 构建目标数据好处在于:

  • 支持同步非结构化数据,实现对各类数据源的通用同步
  • 用户可以自行决定索引的构建和查询逻辑,更轻松实现各类数据分析场景

总结

Elasticsearch 带给业务独特的数据检索体验,是业务数据操作重要一环。CloudCanal 通过长周期、多轮迭代以及业务应用反馈予以鼎力支持,并由此积累了部分经验,借此文章对外分享。

标签:同步,CloudCanal,mapping,Elasticsearch,ElasticSearch,迁移,数据,一镜
From: https://www.cnblogs.com/clougence/p/17807379.html

相关文章

  • elasticSearch 文章
    https://blog.csdn.net/mjl1125/article/details/121782863 https://blog.csdn.net/qq_39397165/article/details/108556817#:~:text=go-elasticSearch%E5%AE%9E%E6%88%98%E7%AF%87%EF%BC%8C%E5%B8%A6%E4%BD%A0%E5%AD%A6%E4%BC%9AelasticSearch%E7%9A%84%E5%A2%9E%E5%88%A0%......
  • XSAN数据恢复-存储空间从XSAN架构迁移到STORNEXT架构时误格式化存储系统的XSAN数据恢
    XSAN数据恢复环境:昆腾存储,MACOS操作系统,存放视频类数据(MXF、MOV等格式文件)。XSAN故障&检测:将存储空间从XSAN架构迁移到STORNEXT架构后,存储空间中数据全部丢失。 故障存储中一共有9个数据卷:1个META信息卷+8个DATA信息卷。北亚企安数据恢复工程师分析META信息卷&读取其中的元信......
  • docker 配置 ElasticSearch + Kibana + ik分词器
    docker配置ElasticSearch+Kibana+ik分词器下载镜像文件dockerpullelasticsearch:7.4.2#存储和检索数据dockerpullkibana:7.4.2#可视化检索数据创建实例配置外置挂在目录,echo这一行命令配置可以被任意主机访问mkdir-p/mydata/elasticsearch/configmkdir-p/......
  • Elasticsearch安装
    Docker单节点修改max_map_count值sysctl-wvm.max_map_count=262144创建持久化目录并配置权限mkdir/opt/elasticsearchsetfacl-mu:1000:rwx-R/opt/elasticsearch/创建配置文件mkdirconfig$cat>elasticsearch.yml<<EOFcluster.name:"docker-cluster"netw......
  • Match第三个参数为-1时的计算规则(旧文迁移)
    以前学二分法的时候,一直以为,Match的第三个参数只要不为0就是以二分法规律进行查找的,可是今天测试了一下,发现人家用的居然是历遍法,规则是:从上往下开始找,遇到比查找值小的前一个的位置,或者第一次出现与查找值相同的位置;如果查找值比查找范围内的第一个值大,则结果为NA;如果查找值比查找......
  • [转]Elasticsearch全文检索入门这一篇就够了
    本文仅针对搜索与Elasticsearch小白,先介绍了全文搜索的原理,然后介绍了Elasticsearch中的一些基本概念,接着讲解如何在Elasticsearch中插入文档构建查询索引,最后介绍Elasticsearch的线上查询API的使用方式。全文搜索原理顺序扫描如何实现全文搜索?最简单的方法就是用正则去匹配文......
  • elasticsearch运维调优-集群和冷热集群
    集群:node1-node3专用主节点node3仅投票节点 启动服务:./bin/elasticsearch后台启动守护进程./bin/elasticsearch推荐方式./bin/elasticsearch-d-ppid关闭进程ps-ef|grepelastic杀进程kill-9'catpid'pkill-Fpid常见问题:本地无法访问:关闭防火墙,生产环境建......
  • git仓库迁移-从A仓库的x分支迁移到B仓库的y分支
    场景:原来代码在A仓库,有几个分支,现在创建了一个新仓库B,需要将A里面的几个分支直接迁移到B仓库去原库:A仓库的x,y,z三个分支目标:B仓库的x1,y1,z1分支执行1、首先在本地进入到A仓库的x分支,执行gitremote,查看A仓库的origin,只有一个,接下来需要addB仓库的origin2、执行 gitremotea......
  • ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
    ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑1.Elasticsearch产生背景大规模数据如何检索如:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:1)用什么数据库好?(mysql、oracle、mongodb、hbase…)2)如......
  • MQ迁移的学习与理解
    生产者是topic,消费者是group一个topic可以对应多个group,每个group可以对应一个或者多个tag配置文件更改topic与group之后会自动注册到阿里云rocketmq,不需要手动注册。 ......