全部產品
Search
文件中心

Elasticsearch:同步方案選取指南

更新時間:Jun 30, 2024

當您在使用關係型資料庫(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是一款提供Data Integration、資料開發及資料品質等全方位的產品服務。支援引入並儲存關係型資料,然後進行轉化和開發,最後將處理後的資料同步到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