-
5分钟搞定 MySQL 到 ElasticSearch 迁移同步-CloudCanal实战
简述
本文介绍如何通过 CloudCanal,五分钟内创建一条长期稳定运行的 MySQL -> ElasticSearch (以下简称 ES) 实时数据迁移同步链路 。
技术内幕
限流
MySQL 到 ES 数据迁移同步过程中,往往会面临源端写入对端 RPS 较大问题,导致 ES 负载较大,影响业务对 ES 的正常读写。CloudCanal 为了应对这个情况,提供限流能力。同步任务创建完毕后,可在 任务详情 -> 参数设置 对源端流量进行限流。
时区处理
CloudCanal 允许用户在创建数据迁移同步任务时指定时区。写入ES 时,源端时间类型数据将会格式化并带上时区信息 , 支持用户在跨国、跨地域场景下使用。
自动创建索引和 Mapping 结构
CloudCanal 迁移同步任务支持自动将源端数据库表结构映射成 ES 索引,该过程中允许用户在 列(column/field) 级别上,个性化设置自己需要的索引和 Mapping 结构。这些设置包括:
- 每个列可以指定是否需要索引
- 可以对 text 类型的 field 设置 ES mapping 中的分词器(标准分词器)
- 索引分片数、副本数自定义设置
映射已建索引
用户可能已经在 ES 中提前建好了索引,这种情况下 CloudCanal 会自动探测,并允许用户配置映射,一张表可映射对端一个索引。
内置 _id 生成和 routing field 指定
写入 ES 时候 _id 用于唯一标识一个 doc。CloudCanal 数据同步默认遵循以下原则:
- routing 使用 _id 值
- 单主键表,会默认使用源端关系表的主键列的列值作为 _id 的值
- 多主键表,会通过分隔符$连接多个主键列的值,组成唯一的 _id 值
- 无主键表,会将所有列的值通过$连接,生成唯一的 _id 值
举个"栗子"
准备 CloudCanal
- 如没有安装 CloudCanal,请参考《CloudCanal安装教程》安装。下面例子介绍如何创建一个 MySQL->ElasticSearch 的迁移同步任务。
添加数据源
-
CloudCanal 支持 6.8 及以上版本 ES,我们点击 数据源管理->新增数据源 添加 ES 数据源
-
填写必要 host 信息后点击 新增数据源
创建任务
-
点击任务管理,选择创建任务
数据源设置
-
勾选源端和目标端数据库,并且选择相应的数据库
功能配置
-
选择数据同步,并勾选数据初始化(带全量迁移)
表&ACTION过滤
-
此处可以进行的操作主要是:
- 勾选需要订阅的表
- 选择需要映射的索引(支持映射已经存在的索引)
- 勾选 IUD 过滤
- 批量设置分片数
tips: CloudCanal的结构迁移支持自动帮用户按照源端表结构创建索引
数据处理
-
本页面提供的主要能力有:
- 列裁剪设置(包括批量筛选和设置)
- 设置源端where过滤条件
- 索引设置
- 分词器设置
- 列映射(如果同步的是已经存在的索引,支持列映射)
创建确认
-
最后一步,确认创建内容无误后点击确认创建。
查看任务状态
-
回到 CloudCanal 控制台,刷新并查看任务实时状态,从结构迁移、数据初始化,到数据同步。
-
登录 ES Kibana 控制台,查看迁移同步过去的结构和数据。
总结
本文简单介绍了如何使用 CloudCanal 快速构建 MySQL->ElasticSearch 数据迁移同步链路,更多的源端和目标端陆续开放。各位小伙伴,如果觉得还不错,请点赞、评论加转发吧。
出处:https://www.cnblogs.com/clougence/p/15165735.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比