同步方案选取指南

当您在使用关系型数据库(RDS)遇到查询慢的问题时,可将RDS中的数据同步至阿里云Elasticsearch进行查询分析。阿里云Elasticsearch是一个基于Lucene的实时分布式的搜索与分析引擎,可近乎于准实时地存储、查询和分析超大数据集。您可以通过DTS、Logstash、DataWorks和Canal等多种方式将RDS中的数据同步至阿里云Elasticsearch。本文介绍各同步方案适用的场景,帮助您根据业务选择合适的场景同步数据。

同步方案

原理说明

适用场景

使用限制

相关文档

DTS实现数据实时同步

通过订阅binlog的方式实现数据同步,在不影响源数据库的情况下,同步延迟可降至毫秒级别。

对数据同步的实时性要求较高的场景。

  • DTS在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库负载上升。

  • 支持自定义索引Mapping,但需保证Mapping中定义的字段与MySQL中一致。

  • 需要购买DTS数据同步作业。购买方式,请参见购买流程;定价说明,请参见计费概述

通过DTS将MySQL数据实时同步到阿里云Elasticsearch

Logstash JDBC数据同步

通过logstash-input-jdbc插件实现通过Logstash批量查询RDS中的数据,并将数据迁移到Elasticsearch。实现的本质是该插件会定期对RDS中的数据进行循环轮询,从而在当前循环中找到上次插入或更改的记录,然后批量查询这些记录并迁移至Elasticsearch。与DTS同步方案相比,该方案的实时性较差,存在秒级延迟。

  • 同步全量数据,接受秒级延迟的场景。

  • 批量查询数据然后进行同步的场景。

  • 使用前,需要先在Logstash中上传与RDS版本兼容的SQL JDBC驱动。

  • 需要在RDS的白名单中加入Logstash集群中节点的IP地址。

  • 需要确保Logstash和RDS在同一时区(避免同步过程中出现时间标记不符的情况)。

  • 需要确保Elasticsearch中的_id字段与RDS中的id字段相同。

  • 当您在RDS中插入或更新数据时,需要确保对应记录有一个包含更新或插入时间的字段。

通过Logstash将RDS MySQL数据同步至Elasticsearch

DataWorks实现离线数据同步

DataWorks是一款提供数据集成、数据开发及数据质量等全方位的产品服务。支持引入并存储关系型数据,然后进行转化和开发,最后将处理后的数据同步到Elasticsearch或其他数据系统。

  • 大数据离线同步场景(可实现最快分钟级的离线数据采集任务)。

  • 需要自定义查询语句,以及多表联合查询后同步数据的场景。

  • 同步整个数据库中数据的场景。

  • 需要开通DataWorks服务。

  • 对于传输速度要求较高或复杂环境中的数据源同步场景,需要自定义资源组。

  • 需要在RDS的白名单中添加资源组的IP地址。

通过DataWorks将MySQL数据同步至Elasticsearch

Canal实现MySQL数据同步

通过订阅binlog的方式实现数据实时同步,在不影响源数据库的情况下,同步延迟可降至毫秒级别。

对数据同步的实时性要求较高的场景。

  • 需要手动在ECS上搭建Canal环境,会增加操作成本。

  • Canal 1.1.4版本暂不支持Elasticsearch 7.x版本。建议使用Canal 1.1.5版本,或者通过其他方式(例如Logstash、DTS)实现MySQL数据同步。

  • 支持自定义索引Mapping,但需保证Mapping中定义的字段与MySQL中一致。

  • 需要您自行保证Canal的可用性,避免出现业务不可用或故障。例如:当出现ECS重启,Canal异常退出等场景时如何继续同步数据等。

通过Canal将MySQL数据同步到阿里云Elasticsearch