我们好呀,我是楼仔。

上星期听到公司搭档共享 MySQL 同步数据到 ES 的计划,发现很有意思,感觉有必要将这块常识点再总结提炼一下,就有了这篇文章。

本文会先讲述数据同步的 4 种计划,并给出常用数据搬迁东西,干货满满!

不 BB,上文章目录:

4 种 MySQL 同步 ES 方案,yyds!

1. 前语

在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来完结读写别离,缓解 MySQL 数据库的查询压力,应对海量数据的杂乱查询。

这其中有一个很重要的问题,就是怎么完结 MySQL 数据库和 ES 的数据同步,今天和我们聊聊 MySQL 和 ES 数据同步的各种计划。

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

2. 数据同步计划

2.1 同步双写

这是一种最为简单的方法,在将数据写到 MySQL 时,一同将数据写到 ES。

4 种 MySQL 同步 ES 方案,yyds!

长处:

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

缺陷:

  • 硬编码,有需求写入 MySQL 的地方都需求添加写入 ES 的代码;
  • 业务强耦合;
  • 存在双写失利丢数据危险;
  • 功能较差,本来 MySQL 的功能不是很高,再加一个 ES,体系的功能必然会下降。

2.2 异步双写

针对多数据源写入的场景,能够借助 MQ 完结异步的多源写入。

4 种 MySQL 同步 ES 方案,yyds!

长处:

  • 功能高;
  • 不易出现数据丢掉问题,首要依据 MQ 音讯的消费保障机制,比如 ES 宕机或许写入失利,还能重新消费 MQ 音讯;
  • 多源写入之间相互阻隔,便于扩展更多的数据源写入。

缺陷:

  • 硬编码问题,接入新的数据源需求完结新的顾客代码;
  • 体系杂乱度添加,引入了音讯中间件;
  • MQ是异步消费模型,用户写入的数据不必定能够立刻看到,形成延时。

2.3 依据 SQL 抽取

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

  1. 数据库的相关表中添加一个字段为 timestamp 的字段,任何 CURD 操作都会导致该字段的时刻发生改变;
  2. 本来程序中的 CURD 操作不做任何改变;
  3. 添加一个定时器程序,让该程序按必定的时刻周期扫描指定的表,把该时刻段内发生改变的数据提取出来;
  4. 逐条写入到 ES 中。

4 种 MySQL 同步 ES 方案,yyds!

长处:

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

缺陷:

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

经典计划:借助 Logstash 完结数据同步,其底层完结原理就是依据装备定时运用 SQL 查询新增的数据写入 ES 中,完结数据的增量同步。

2.4 依据 Binlog 实时同步

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

当然有,能够利用 MySQL 的 Binlog 来进行同步。

4 种 MySQL 同步 ES 方案,yyds!

详细步骤如下:

  • 读取 MySQL 的 Binlog 日志,获取指定表的日志信息;
  • 将读取的信息转为 MQ;
  • 编写一个 MQ 消费程序;
  • 不断消费 MQ,每消费完一条音讯,将音讯写入到 ES 中。

长处:

  • 没有代码侵入、没有硬编码;
  • 原有体系不需求任何改变,没有感知;
  • 功能高;
  • 业务解耦,不需求关注本来体系的业务逻辑。

缺陷:

  • 构建 Binlog 体系杂乱;
  • 假如选用 MQ 消费解析的 Binlog 信息,也会像计划二一样存在 MQ 延时的危险。

3. 数据搬迁东西选型

对于上面 4 种数据同步计划,“依据 Binlog 实时同步”计划是现在最常用的,也诞生了很多优异的数据搬迁东西,这儿首要对这些搬迁东西进行介绍。

这些数据搬迁东西,很多都是依据 Binlog 订阅的方法完结,模仿一个 MySQL Slave 订阅 Binlog 日志,然后完结 CDC(Change Data Capture),将已提交的更改发送到下流,包含 INSERT、DELETE、UPDATE。

至于怎么伪装?我们需求先了解 MySQL 的主从复制原理,需求学习这块常识的同学,能够看我之前写的高并发教程,里边有详细解说。

3.1 Cannel

依据数据库增量日志解析,供给增量数据订阅&消费,现在首要支撑 MySQL。

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

  1. Canal 服务端向 MySQL 的 master 节点传输 dump 协议;
  2. MySQL 的 master 节点接收到 dump 请求后推送 Binlog 日志给 Canal 服务端,解析 Binlog 对象(原始为 byte 流)转成 Json 格局;
  3. Canal 客户端经过 TCP 协议或 MQ 方法监听 Canal 服务端,同步数据到 ES。

4 种 MySQL 同步 ES 方案,yyds!

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

4 种 MySQL 同步 ES 方案,yyds!

3.2 阿里云 DTS

数据传输服务 DTS(Data Transmission Service)支撑 RDBMS、NoSQL、OLAP 等多种数据源之间的数据传输。

它供给了数据搬迁、实时数据订阅及数据实时同步等多种数据传输方法。相对于第三方数据流东西,DTS 供给丰厚多样、高功能、高安全可靠的传输链路,一同它供给了诸多便当功能,极大方便了传输链路的创立及办理。

特点:

  • 多数据源:支撑 RDBMS、NoSQL、OLAP 等多种数据源间的数据传输;
  • 多传输方法:支撑多种传输方法,包含数据搬迁、实时数据订阅及数据实时同步;
  • 高功能:底层选用了多种功能优化办法,全量数据搬迁高峰期时功能能够达到70MB/s,20万的TPS,运用高规格服务器来确保每条搬迁或同步链路都能具有杰出的传输功能;
  • 高可用:底层为服务集群,假如集群内任何一个节点宕机或发生毛病,控制中心都能够将这个节点上的一切使命快速切换到其他节点上,链路稳定性高;
  • 简单易用:供给可视化办理界面,供给导游式的链路创立流程,用户能够在其控制台简单轻松地创立传输链路;
  • 需求付费。

再看看 DTS 的体系架构

4 种 MySQL 同步 ES 方案,yyds!

  • 高可用:数据传输服务内部每个模块都有主备架构,确保体系高可用。容灾体系实时检测每个节点的健康状况,一旦发现某个节点反常,会将链路快速切换到其他节点。
  • 数据源地址动态适配:对于数据订阅及同步链路,容灾体系还会监测数据源的衔接地址切换等改变操作,一旦发现数据源发生衔接地址改变,它会动态适配数据源新的衔接方法,在数据源改变的情况下,确保链路的稳定性。

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

3.3 Databus

Databus 是一个低推迟、可靠的、支撑业务的、坚持一致性的数据改变抓取体系。由 LinkedIn 于 2013 年开源。

Databus 经过发掘数据库日志的方法,将数据库改变实时、可靠的从数据库拉取出来,业务能够经过定制化 client 实时获取改变并进行其他业务逻辑。

特点:

  • 多数据源:Databus 支撑多种数据来历的改变抓取,包含 Oracle 和 MySQL。
  • 可扩展、高度可用:Databus 能扩展到支撑数千顾客和业务数据来历,一同坚持高度可用性。
  • 业务按序提交:Databus 能坚持来历数据库中的业务完好性,并依照业务分组和来历的提交顺寻交付改变事情。
  • 低推迟、支撑多种订阅机制:数据源改变完结后,Databus 能在毫秒级内将业务提交给顾客。一同,顾客运用D atabus 中的服务器端过滤功能,能够只获取自己需求的特定数据。
  • 无限回溯:对顾客支撑无限回溯能力,例如当顾客需求发生数据的完好拷贝时,它不会对数据库发生任何额外负担。当顾客的数据大大落后于来历数据库时,也能够运用该功能。

再看看 Databus 的体系架构。

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

4 种 MySQL 同步 ES 方案,yyds!

  • 快速改变的顾客直接从 Relay 中取事情;
  • 假如一个顾客的数据更新大幅落后,它要的数据就不在 Relay 的日志中,而是需求请求 Bootstrap 服务,回来的将会是自顾客上次处理改变之后的一切数据改变快照。

开源地址:github.com/linkedin/da…

3.4 其它

Flink

  • 有界数据流和无界数据流上进行有状况核算分布式处理引擎和结构。
  • 官网地址:flink.apache.org

CloudCanal

  • 数据同步搬迁体系,商业产品。
  • 官网地址:www.clougence.com/?utm_source…

Maxwell

  • 运用简单,直接将数据改变输出为json字符串,不需求再编写客户端。
  • 官网地址:maxwells-daemon.io

DRD

  • 阿里巴巴集团自主研制的分布式数据库中间件产品,专注于处理单机关系型数据库扩展性问题,具有轻量(无状况)、灵活、稳定、高效等特性。
  • 官方地址:www.aliyun.com/product/drd…

yugong

  • 帮助用户完结从 Oracle 数据搬迁到 MySQL。
  • 访问地址:github.com/alibaba/yug…

4. 后记

经过这篇文章,让你知道 MySQL 和其它多维数据的同步计划,以及常用的数据搬迁东西,帮助你更好选型。

所以这篇也是一篇标准的技能选型文章,之前其实也写过音讯行列、微服务网关、注册中心、装备中心、数据监控的选型,那这篇能够作为技能选择的第 6 篇文章。

写文章不是目的,最重要的是怎么应用到项目中,现在 MySQL + Cannel + ES 的数据同步计划代码,已经在技能派项目中完结,下一篇文章就会解说详细的完结逻辑,敬请期待!


精品 PDF 获取

对于一个想去大厂的后端研制,能否熟练掌握高并发是判断他优异与否的重要标准之一,这本手册《高并发手册》适当经典,涉及缓存、异步、限流、熔断、降级、分片、雪崩、主从、一致性等一系列常识点。

4 种 MySQL 同步 ES 方案,yyds!

PDF 获取地址:mp.weixin.qq.com/s/twRVqcjqb…

我从清晨走过,也拥抱夜晚的星斗,人生没有捷径,你我皆普通,你好,陌生人,一同共勉。