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

注意 同步数据时,建议不要同步.momitoring、.kibana、.security等,以.开头的系统索引,否则可能导致Kibana出现故障。
同步方案 原理说明 适用场景 使用限制 相关文档
DTS实现数据实时同步 DTS采用binlog方式实现数据同步,在不影响源数据库的情况下,同步延迟可降至毫秒级别。 对数据同步的实时性要求较高的场景。
  • DTS目前不支持ES 7.4版本。
  • DTS不支持多表查询及多表联合查询,可将多表做成视图方式进行同步。
  • DTS在执行全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库负载上升。
  • 支持自定义索引Mapping结构,但需保证Mapping中定义的字段与MySQL中一致。
通过DTS将MySQL数据实时同步到阿里云ES
Logstash JDBC数据同步 通过logstash-input-jdbc插件实现通过Logstash批量查询RDS中的数据,并将数据迁移到ES。实现的本质是该插件会定期对RDS中的数据进行循环轮询,从而在当前循环中找到上次插入或更改的记录,然后批量查询这些记录并迁移至ES。与DTS同步方案相比,该方案的实时性较差,存在秒级延迟。
  • 同步全量数据,接受秒级延迟的场景。
  • 批量查询数据然后进行同步的场景。
  • 使用前,需要先在Logstash中上传与RDS 版本兼容的SQL JDBC驱动。
  • 需要在RDS的白名单中加入Logstash集群中节点的IP地址。
  • 需要确保Logstash和RDS在同一时区(避免同步过程中出现时间标记不符的情况)。
  • 需要确保ES中的_id字段与RDS中的id字段相同。
  • 当您在RDS中插入或更新数据时,需要确保对应记录有一个包含更新或插入时间的字段。
通过阿里云Logstash将RDS MySQL数据同步至阿里云ES
DataWorks实现离线数据同步 DataWorks是一款提供数据集成、数据开发及数据质量等全方位的产品服务。支持引入并存储关系型数据,然后进行转化和开发,最后将处理后的数据同步到ES或其他数据系统。
  • 大数据离线同步场景(可实现最快5分钟一次的离线数据采集任务)。
  • 需要自定义查询语句,以及多表联合查询后同步数据的场景。
  • 需要开通DataWorks服务。
  • 对于传输速度要求较高或复杂环境中的数据源同步场景,需要自定义资源组。
  • 需要在RDS的白名单中添加资源组的IP地址。
通过DataWorks将MySQL数据同步至Elasticsearch
Canal实现MySQL数据同步 通过binlog方式实现数据实时同步及订阅。 对数据同步的实时性要求较高的场景。
  • 需要手动在ECS上搭建Canal环境,会增加操作成本。
  • 当前最新版本的Canal(1.1.4)暂不支持ES 7.4版本。
  • 支持自定义索引Mapping结构,但需保证Mapping中定义的字段与MySQL中一致。
通过Canal将MySQL数据同步到阿里云ES