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

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

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

## 简介

[CloudCanal](https://www.clougence.com?kw=51cto_20231103) 对于 [Elasticsearch](https://www.elastic.co/) 的支持经历了很多轮迭代,版本一路从 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](https://www.clougence.com?kw=51cto_20231103) 通过长周期、多轮迭代以及业务应用反馈予以鼎力支持,并由此积累了部分经验,借此文章对外分享。


标签:同步,CloudCanal,mapping,Elasticsearch,ElasticSearch,迁移,数据,一镜
From: https://blog.51cto.com/u_6814198/8164576

相关文章

  • 一镜到底 ElasticSearch 数据迁移同步技术
    简介CloudCanal对于Elasticsearch的支持经历了很多轮迭代,版本一路从6.x,7.x支持到8.x版本,也适配了其纷繁多样的API。因为Elasticsearch是一个相当流行的、实时的、并且具备一定不可替代能力的搜索引擎,所以很有必要对比下市面上我们能够比较容易获得的、免费的数据迁移......
  • 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)如......