跳到主要内容

如何将 MySQL 数据实时、高效同步到 RedShift?

Amazon Redshift 是亚马逊 WEB 服务(AWS)提供的一种完全托管的 PB 级云中数据仓库服务,主要用于处理大规模数据集的高性能分析查询,目前被广泛应用于企业级数据分析场景。

为什么使用 Redshift 作为 MySQL 的实时数仓呢?

在回答这个问题之前,我们先简单看一下 Redshift 的几个特点:

  • 列式存储:Redshift 使用列式存储引擎,将数据按列而不是按行进行存储。这种存储方式有效地压缩数据并提高了查询性能,特别是对于那些只涉及特定列的查询。
  • 大规模并行处理(MPP):Redshift 采用 MPP 架构,可以将查询分布到集群中的多个节点上并行执行,以实现快速的数据处理和分析。这种架构使得 Redshift 能够有效地处理大规模数据集,并且可以根据需要轻松扩展性能。
  • 完全托管:Redshift 是一种完全托管的云服务,AWS 负责管理底层基础架构,包括硬件和软件的维护、备份和升级等,用户无需配置数据仓库,只需关注数据的查询分析工作。
  • 全 SQL 环境:无学习成本,用户直接用熟悉的 SQL 即可进行相关操作。

简单来说,无论你的数据集有多大,Redshift 均可提供高性能的查询分析服务,完美弥补 MySQL 在数据分析上的短板。大家都知道,MySQL 本身主要用于在线事务处理(OLTP),如果要在 MySQL 上进行大规模数据查询,会发生什么呢?

  • 性能下降:由于大规模数据查询通常需要进行全表扫描,消耗大量服务器的 I/O 资源,导致数据库性能下降甚至崩溃。
  • 查询速度慢:当数据量巨大或查询语句较为复杂时,MySQL 的处理速度极慢,无法在期望的时间内获取查询结果。

如果你的 MySQL 刚好是一个线上业务库,那大规模数据查询绝对是一个灾难的导火索。

因此,我们需要把专业的事情交给专业的工具去做。如果企业有大规模数据查询和分析需求,那把 MySQL 的数据实时同步到 Redshift 是一个很好的选择。

如何将 MySQL 的数据实时同步到 Redshift?

众所周知,在两个毫不相干的数据管理系统之间进行数据同步,特别是实时同步,其复杂程度足以让高级 DBA 脑瓜疼。因为有几个不得不解决的问题:

  • 表的初始化:在同步数据之前,需要手动在 Redshift 端创建和源端一致的表结构,然后才能从源端接收数据。当源端有大量表且表结构很复杂的情况下,工作量巨大且较容易出错。
  • 数据结构的映射:两者数据结构不同,怎么确保数据从源端同步过来后的完整性?除非你对两者的数据模型的理解非常极致,且保证绝对不出错,才能达到理想的结果。
  • 实时同步的速率:通过 Redshift 进行数据实时分析的大前提是,当前 Redshift 中的数据必须是最新的,即和源端的 MySQL 完全一致,分析结果才有意义。要保证这一点,可不是一个轻松的工作。
  • 源端 DDL 语句的联动:最痛的一个点,如何保证源端的数据结构发生变化时,同步链路不中断?那就需要实时捕获源端 MySQL 的 DDL 变更,并及时在目标端的 Redshift 中同步执行。

这些问题如果可以顺利解决,那实时同步工作将会相当丝滑。那么如何解决呢?方法自然是有的,而且丝毫不费力。对于上述 4 个问题,NineData 有绝对的发言权,我们先来看看它的特性:

  • 结构复制:基于目标端数据源的特性,自动高效地完成表的创建、数据结构的映射等工作。
  • 复制性能:基于动态攒批、并行复制、Stream Load 等技术,复制性能轻松达到 200 MB/S。
  • DDL 捕获与执行:实时检测源端中的 DDL 操作,并同步在目标端中执行,保证其他业务变更能够稳定地进行。

轻松解决且非常愉快,下面来看看怎么操作。

步骤一:录入源和目标数据源

  1. 登录 NineData 控制台,单击数据源管理>数据源,然后在页面中单击创建数据源,选择需要录入的数据源。

    image-20240409164456132

    image-20240409164545478

  2. 根据页面提示进行配置,然后单击创建数据源完成创建。

    image-20240409164807199

步骤二:配置同步链路

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击创建复制

    image-20240319150313727

  2. 根据页面提示配置复制任务,由于我们想要实现长期的实时数据同步,需要在复制类型处额外勾选增量复制

    image-20240409164959919

  3. 配置完成后启动任务,针对您配置的所有同步对象,NineData 会先对所有的存量数据进行全量迁移,接下来就是实时同步 MySQL 中新增的增量数据,所有新写入的数据都将一条不漏地同步到 Redshift,每当目标端的增量数据追平源端时,任务面板中会显示延迟 0 秒,代表当前 Redshift 中的数据是最新的。

步骤三(可选):校验目标端同步数据的完整性

除了同步功能以外,NineData 还提供了同步后源端和目标端同步数据的对比功能,以确保目标端数据的完整性。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

    image-20240426103737379

  2. 单击数据对比页签,即可展示对比结果(如果步骤二的任务配置中未勾选开启数据一致性对比,则此处还需要单击开启数据对比)。

    image-20240426103942430

  1. 您可以在一段时间后,单击页面中的重新对比,校验最新增量数据的同步结果。

    image-20240426104126191

步骤四(可选):配置任务异常告警

由于是长期任务,您可能需要系统实时监控任务状态,在任务有异常时即刻通知您。

  1. 登录 NineData 控制台,单击数据复制>数据复制,然后单击步骤二中创建的复制任务 ID。

    image-20240426103737379

  2. 单击右上角的配置告警

    image-20240426104215991

  3. 输入策略名称,单击保存配置即可。您可以直接使用内置的默认规则,在任务运行失败,或复制延迟大于等于 10 分钟的时候,发送短信提醒您。您也可以自定义创建规则,根据您的需求来进行通知。

    image-20240426104255862

总结

至此,您已经通过 NineData 数据复制产品实现了一条长期稳定的 MySQL 到 Redshift 的实时同步链路,您可以充分利用 Amazon Redshift 的列式存储、大规模并行处理、完全托管以及全 SQL 环境等特点,弥补 MySQL 在大规模数据分析上的不足,为企业的数据分析工作提供可靠支持。