139. MySQL同步ES的四种方案

news2024/9/21 11:16:04

文章目录

  • 1. 前言
  • 2. 数据同步方案
    • 2.1 同步双写
    • 2.2 异步双写
    • 2.3 基于 SQL 抽取
    • 2.4 基于 Binlog 实时同步
  • 3. 数据迁移工具选型
    • 3.1 Canel
    • 3.2 阿里云 DTS
    • 3.3 Databus
    • 3.4 其它
  • 4. 后记

本文介绍数据同步的 4 种方案,并给出常用数据迁移工具,目录如下:
在这里插入图片描述

1. 前言

在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。此外,当MySQL是分库分表的情况下,查询where条件中必须带上分片键,大大限制了查询场景,此时也可以将数据异构到ES中,支持多样化的查询。

这其中有一个很重要的问题,就是如何实现 MySQL 数据库和 ES 的数据同步,本文就和大家聊聊 MySQL ES 数据同步的各种方案。

我们先看看下面 4 种常用的数据同步方案。

2. 数据同步方案

2.1 同步双写

这是一种最为简单的方式,在将数据写到 MySQL 时,同时将数据写到 ES该方式使用较少。

在这里插入图片描述

优点:

  • 业务逻辑简单;
  • 实时性高。

缺点

  • 硬编码,有需要写入 MySQL 的地方都需要添加写入 ES 的代码;
  • 业务强耦合;
  • 存在双写失败丢数据风险;
  • 性能较差,本来 MySQL 的性能不是很高,再加一个 ES,系统的性能必然会下降。
  • 数据可能不一致,比如写MySQL成功,写ES失败。

2.2 异步双写

针对多数据源写入的场景,可以借助 MQ 实现异步的多源写入。工作中常见该方式,比如上游某数据更新后,记入DB,并发送MQ消息,下游消费消息后,可额外加一些信息写入ES,支持下游自己业务场景内的一些个性化查询。

在这里插入图片描述

优点:

  • 性能高;
  • 不易出现数据丢失问题,主要基于 MQ 消息的消费保障机制,比如 ES 宕机或者写入失败,还能重新消费 MQ 消息;
  • 多源写入之间相互隔离,便于扩展更多的数据源写入。

缺点:

  • 硬编码问题,接入新的数据源需要实现新的消费者代码;
  • 系统复杂度增加,引入了消息中间件;
  • MQ是异步消费模型,用户写入的数据不一定可以马上看到,造成延时。

2.3 基于 SQL 抽取

上面两种方案中都存在硬编码问题,代码的侵入性太强,如果对实时性要求不高的情况下,可以考虑用定时器来处理:

  1. 数据库的相关表中增加一个字段为 timestamp 的字段,任何 CURD 操作都会导致该字段的时间发生变化;

  2. 原来程序中的 CURD 操作不做任何变化;

  3. 增加一个定时器程序,让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;

  4. 逐条写入到ES中。

图片

优点:

  • 不改变原来代码,没有侵入性、没有硬编码;
  • 没有业务强耦合,不改变原来程序的性能;
  • Worker 代码编写简单不需要考虑增删改查。

缺点:

  • 时效性较差,由于是采用定时器根据固定频率查询表来同步数据,尽管将同步周期设置到秒级,也还是会存在一定时间的延迟;
  • 对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的从库上。

经典方案:借助 Logstash 实现数据同步,其底层实现原理就是根据配置定期使用 SQL 查询新增的数据写入 ES 中,实现数据的增量同步

2.4 基于 Binlog 实时同步

上面三种方案要么有代码侵入,要么有硬编码,要么有延迟,那么有没有一种方案既能保证数据同步的实时性又没有代入侵入呢?

当然有,可以利用 MySQLBinlog 来进行同步。该方式常用,一般用于业务部门内部异构数据查询的场景

图片

具体步骤如下:

  1. 读取 MySQLBinlog 日志,获取指定表的日志信息;
  2. 将读取的信息转为 MQ
  3. 编写一个 MQ 消费程序;
  4. 不断消费 MQ,每消费完一条消息,将消息写入到 ES 中。

优点:

  • 没有代码侵入、没有硬编码;
  • 原有系统不需要任何变化,没有感知;
  • 性能高;
  • 业务解耦,不需要关注原来系统的业务逻辑。

缺点:

  • 构建 Binlog 系统复杂;
  • 如果采用 MQ 消费解析的 Binlog 信息,也会像方案二中一样存在 MQ 延时的风险。

3. 数据迁移工具选型

对于上面 4 种数据同步方案,“基于 Binlog 实时同步”方案是目前最常用的,也诞生了很多优秀的数据迁移工具,这里主要对这些迁移工具进行介绍。

这些数据迁移工具,很多都是基于 Binlog 订阅的方式实现,模拟一个 MySQL Slave 订阅 Binlog 日志,从而实现 CDC(Change Data Capture),将已提交的更改发送到下游,包括 INSERT、DELETE、UPDATE

至于如何伪装?大家需要先了解 MySQL 的主从复制原理

在这里插入图片描述
mysql主备(主从)复制原理,从上层来看,复制分成三步:

  • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);

  • slave通过IO线程(I/O thread)将masterbinary log events拷贝到它的中继日志(relay log);

  • slave通过SQL线程(SQL thread)重放中继日志中的事件,将改变反映到它自己的数据。

3.1 Canel

基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持 MySQL

Canal 原理就是伪装成 MySQL 的从节点,从而订阅 master 节点的 Binlog 日志,主要流程为:

  • Canal 服务端MySQLmaster 节点传输dump协议;
  • MySQLmaster 节点接收到 dump 请求后推送 Binlog 日志给 Canal服务端Canal服务端解析 Binlog 对象(原始为 byte 流)转成 Json 格式;
  • Canal客户端通过 TCP 协议或 MQ 形式监听 Canal服务端,同步数据到 ES

在这里插入图片描述

下面是 Canel 执行的核心流程,其中 Binlog Parser 主要负责 Binlog 的提取、解析和推送,EventSink 负责数据的过滤 、路由和加工,仅作了解即可。

在这里插入图片描述

3.2 阿里云 DTS

数据传输服务 DTS(Data Transmission Service)支持 RDBMSNoSQLOLAP 等多种数据源之间的数据传输。

它提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输方式。相对于第三方数据流工具,DTS 提供丰富多样、高性能、高安全可靠的传输链路,同时它提供了诸多便利功能,极大方便了传输链路的创建及管理。

特点:

  • 多数据源:支持 RDBMS、NoSQL、OLAP 等多种数据源间的数据传输;
  • 多传输方式:支持多种传输方式,包括数据迁移、实时数据订阅及数据实时同步;
  • 高性能:底层采用了多种性能优化措施,全量数据迁移高峰期时性能可以达到70MB/s20万TPS,使用高规格服务器来保证每条迁移或同步链路都能拥有良好的传输性能;
  • 高可用:底层为服务集群,如果集群内任何一个节点宕机或发生故障,控制中心都能够将这个节点上的所有任务快速切换到其他节点上,链路稳定性高;
  • 简单易用:提供可视化管理界面,提供向导式的链路创建流程,用户可以在其控制台简单轻松地创建传输链路;
  • 需要付费。

再看看 DTS 的系统架构。

在这里插入图片描述

高可用:数据传输服务内部每个模块都有主备架构,保证系统高可用。容灾系统实时检测每个节点的健康状况,一旦发现某个节点异常,会将链路快速切换到其他节点。

数据源地址动态适配:对于数据订阅及同步链路,容灾系统还会监测数据源的连接地址切换等变更操作,一旦发现数据源发生连接地址变更,它会动态适配数据源新的连接方式,在数据源变更的情况下,保证链路的稳定性。

更多内容,请查看阿里官方文档:https://help.aliyun.com/product/26590.html

3.3 Databus

Databus 是一个低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由 LinkedIn2013 年开源。

Databus 通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化 client 实时获取变更并进行其他业务逻辑。

特点:

  • 多数据源:Databus 支持多种数据来源的变更抓取,包括 OracleMySQL
  • 可扩展、高度可用:Databus 能扩展到支持数千消费者和事务数据来源,同时保持高度可用性。
  • 事务按序提交:Databus 能保持来源数据库中的事务完整性,并按照事务分组和来源的提交顺寻交付变更事件。
  • 低延迟、支持多种订阅机制:数据源变更完成后,Databus 能在毫秒级内将事务提交给消费者。同时,消费者使用Databus 中的服务器端过滤功能,可以只获取自己需要的特定数据。
  • 无限回溯:对消费者支持无限回溯能力,例如当消费者需要产生数据的完整拷贝时,它不会对数据库产生任何额外负担。当消费者的数据大大落后于来源数据库时,也可以使用该功能。

再看看 Databus 的系统架构。

Databus 由 Relays、bootstrap 服务和 Client lib 等组成,Bootstrap 服务中包括 Bootstrap Producer 和 Bootstrap Server。

图片

  • 快速变化的消费者直接从 Relay 中取事件;
  • 如果一个消费者的数据更新大幅落后,它要的数据就不在 Relay 的日志中,而是需要请求 Bootstrap 服务,返回的将会是自消费者上次处理变更之后的所有数据变更快照。
  • 开源地址:https://github.com/linkedin/databus

3.4 其它

Flink

有界数据流和无界数据流上进行有状态计算分布式处理引擎和框架。

官网地址:https://flink.apache.org

CloudCanal

数据同步迁移系统,商业产品。

官网地址:https://www.clougence.com/?utm_source=wwek

Maxwell

使用简单,直接将数据变更输出为json字符串,不需要再编写客户端。

官网地址:http://maxwells-daemon.io

DRD

阿里巴巴集团自主研发的分布式数据库中间件产品,专注于解决单机关系型数据库扩展性问题,具备轻量(无状态)、灵活、稳定、高效等特性。

官方地址:https://www.aliyun.com/product/drds

yugong

帮助用户完成从 Oracle 数据迁移到 MySQL。

访问地址:https://github.com/alibaba/yugong

4. 后记

本文记录了 MySQL 和其它多维数据的同步方案,以及常用的数据迁移工具,希望能帮助你更好选型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件测试专栏】认识软件测试、测试与开发的区别

博客主页:Duck Bro 博客主页系列专栏:软件测试专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 认识软件测试、测试与开发的区别 关键词:软件测试、测…

最短路算法详解(Dijkstra 算法,Bellman-Ford 算法,Floyd-Warshall 算法)

文章目录 一、Dijkstra 算法二、Bellman-Ford 算法三、Floyd-Warshall 算法 由于文章篇幅有限,下面都只给出算法对应的部分代码,需要全部代码调试参考的请点击: 图的源码 最短路径问题:从在带权图的某一顶点出发,找出…

【PyCharm激活码】2024年最新pycharm专业版激活码+安装教程!

一、PyCharm激活 激活码: KQ8KMJ77TY-eyJsaWNlbnNlSWQiOiJLUThLTUo3N1RZIiwibGljZW5zZWVOYW1lIjoiVW5pdmVyc2l0YXMgTmVnZXJpIE1hbGFuZyIsImxpY2Vuc2VlVHlwZSI6IkNMQVNTUk9PTSIsImFzc2lnbmVlTmFtZSI6IkpldOWFqOWutuahtiDorqTlh4blupflkI0iLCJhc3NpZ25lZUVtYWlsIjoi…

ArcEngine二次开发实用函数18:使用shp矢量对栅格文件进行掩模和GP授权获取

目录 1. 权限设置 2. 添加如下引用 3. 核心代码: 首先要确定要使用的gp工具需要什么权限,这个可以在工具的帮助中查看;获取权限之后,引用名称空间,编写处理代码: 下面给出具体的实例代码: 1. 权限设置 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Eng…

介绍一下最近很火的一款游戏黑神话悟空,以及国产游戏面临的挑战

《黑神话:悟空》是一款由杭州游科互动科技有限公司开发的单机动作角色扮演游戏,以中国古典名著《西游记》为背景。游戏在2024年8月20日上线,支持PC(Steam、Epic、Wegame)和PlayStation 5平台,未来还将登陆X…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

浅谈 Android 15 新 API:确保 TextView 完整展示、不被切断~

本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! 前言 很多语言和文字拥有特殊的、复杂的写法、画法,一个字符可能延伸到前一个字符的区域,甚至后一个字符的区域。 …

力扣375.猜数字大小 II

力扣375.猜数字大小 II dp dp[i][j]是说依次以从i到j的数字作为分割点(猜的数),必定赢的游戏所用钱的最小值。 枚举每一列,从下往上算出dp[i][j],最终答案为dp[1][n] class Solution {public:int getMoneyAmount(int n) {if(n 1)retu…

巧用scss实现一个通用的媒介查询代码

巧用scss实现一个通用的媒介查询代码 效果展示 实现代码 <template><div class"page-root"><div class"header"></div><div class"content"><div class"car-item" v-for"item in 9">…

20行为型设计模式——访问者模式

一、访问者模介绍 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将操作封装在访问者对象中&#xff0c;以便在不改变被访问对象的类的前提下&#xff0c;定义新的操作。它允许你在不修改现有代码的情况下&#xff0c;向对象结构中添…

类和对象以及内存管理

对象拷贝时的编译器优化 现代编译器会为了尽可能提高程序的效率&#xff0c;在不影响正确性的情况下会尽可能减少⼀些传参和传返回值的过程中可以省略的拷贝。如何优化C标准并没有严格规定&#xff0c;各个编译器会根据情况自行处理。当前主流的相对新⼀点的编译器对于连续⼀个…

电池信息 v5.29.11 高级版,智能优化充电,最多可延长50%电池寿命

Charging Master 是一款非常实用的安卓 APP&#xff0c;专注于为您的手机充电提供最佳体验。借助其智能优化功能&#xff0c;Charging Master 能够最大程度地延长电池寿命&#xff0c;最多可达 50% 的节省。此外&#xff0c;该应用还提供了一系列功能&#xff0c;助您更好地管理…

提升团队效率的9款免费办公工具评测

本文主要介绍了以下9款协同办公软件&#xff1a;1.Worktile&#xff1b;2.PingCode&#xff1b;3.石墨文档&#xff1b;4.Teambition&#xff1b;5.蓝湖&#xff1b;6.工作宝&#xff1b;7.飞书&#xff1b;8.Asana&#xff1b;9.ClickUp。 在现代职场中&#xff0c;团队协作已…

GD - GD32350R_EVAL - PWM实验和验证1

文章目录 GD - GD32350R_EVAL - PWM实验和验证1概述笔记实验设计实验环境GD32350R_EVAL 的硬件连接修改程序配置 - 只产生PWM波&#xff0c;不要CMP清除波形TIMER0时钟设置TIMER0的PWM设置参数设置main()中PWM波形的开启代码示波器测量结果如果要产生4KHZ的PWM需要设置怎样的参…

在centos系统中kill掉指定进程

如上图&#xff0c;我想kill掉 python3 func_tg_1_vps.py这个进程&#xff08;而不kill掉python3 func_tg_2_vps.py&#xff09;。 解决方法&#xff1a; 第一步&#xff1a;首先使用ps -ef | grep python3命令&#xff0c;查出所有包含python3的命令 拿其中一条讲解 root …

开放式耳机漏音有多大?开放式耳机是否值得购买?

开放式耳机确实存在漏音的问题&#xff0c;这是因为其设计原理决定的。开放式耳机不像封闭式耳机那样完全封闭耳道&#xff0c;因此声音会向外散播&#xff0c;导致漏音。不过&#xff0c;随着技术的发展&#xff0c;许多耳机制造商已经开始着手解决这个问题&#xff0c;通过改…

Git之2.0版本重要特性及用法实例(五十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

VScode 使用记录

插件 1、代码提示插件&#xff1a;Codeium 安装说明&#xff1a;Codeium&#xff1a;强大且免费的AI智能编程助手 - Su的技术博客 (verysu.com) 用google账号登陆&#xff0c;跳转按照官网给的三个步骤来 step1&#xff1a;复制token&#xff1b; step2&#xff1a;在文件页…

中秋佳节,南卡Runner Pro5骨传导耳机让团圆更圆满!

中秋节&#xff0c;这个承载着温馨与团圆的节日&#xff0c;是向亲朋好友表达深情厚意的绝佳时刻。在这样一个特别的日子里&#xff0c;挑选一份既实用又充满科技感的礼物&#xff0c;无疑能够给人们带来惊喜与感动。南卡Runner Pro5骨传导耳机&#xff0c;凭借其创新的设计和卓…

绿色消费新动力:‘众店‘模式引领数字经济下的零售创新

在数字浪潮的推动下&#xff0c;传统零售业正经历着前所未有的转型。绿色消费积分系统&#xff0c;在这一变革中崭露头角&#xff0c;成为新兴消费平台的佼佼者。 一、"众店"平台的快速崛起 仅用两年时间&#xff0c;"众店"平台就实现了巨大的飞跃&#x…