主頁 > 資料庫 > 4種資料同步到Elasticsearch方案

4種資料同步到Elasticsearch方案

2023-06-04 08:08:37 資料庫

上周聽到公司同事分享 MySQL 同步資料到 ES 的方案,發現很有意思,感覺有必要將這塊知識點再總結提煉一下,就有了這篇文章,

本文會先講述資料同步的 4 種方案,并給出常用資料遷移工具,干貨滿滿!

不 BB,上文章目錄:

圖片

1. 前言

在實際專案開發中,我們經常將 MySQL 作為業務資料庫,ES 作為查詢資料庫,用來實作讀寫分離,緩解 MySQL 資料庫的查詢壓力,應對海量資料的復雜查詢,

這其中有一個很重要的問題,就是如何實作 MySQL 資料庫和 ES 的資料同步,今天和大家聊聊 MySQL 和 ES 資料同步的各種方案,

我們先看看下面 4 種常用的資料同步方案,

2. 資料同步方案

2.1 同步雙寫

這是一種最為簡單的方式,在將資料寫到 MySQL 時,同時將資料寫到 ES,

圖片

優點:

  • 業務邏輯簡單;
  • 實時性高,

缺點:

  • 硬編碼,有需要寫入 MySQL 的地方都需要添加寫入 ES 的代碼;
  • 業務強耦合;
  • 存在雙寫失敗丟資料風險;
  • 性能較差,本來 MySQL 的性能不是很高,再加一個 ES,系統的性能必然會下降,

2.2 異步雙寫

針對多資料源寫入的場景,可以借助 MQ 實作異步的多源寫入,

圖片

優點:

  • 性能高;
  • 不易出現資料丟失問題,主要基于 MQ 訊息的消費保障機制,比如 ES 宕機或者寫入失敗,還能重新消費 MQ 訊息;
  • 多源寫入之間相互隔離,便于擴展更多的資料源寫入,

缺點:

  • 硬編碼問題,接入新的資料源需要實作新的消費者代碼;
  • 系統復雜度增加,引入了訊息中間件;
  • MQ是異步消費模型,用戶寫入的資料不一定可以馬上看到,造成延時,

2.3 基于 SQL 抽取

上面兩種方案中都存在硬編碼問題,代碼的侵入性太強,如果對實時性要求不高的情況下,可以考慮用定時器來處理:

  1. 資料庫的相關表中增加一個欄位為 timestamp 的欄位,任何 CURD 操作都會導致該欄位的時間發生變化;
  2. 原來程式中的 CURD 操作不做任何變化;
  3. 增加一個定時器程式,讓該程式按一定的時間周期掃描指定的表,把該時間段內發生變化的資料提取出來;
  4. 逐條寫入到 ES 中,
圖片

優點:

  • 不改變原來代碼,沒有侵入性、沒有硬編碼;
  • 沒有業務強耦合,不改變原來程式的性能;
  • Worker 代碼撰寫簡單不需要考慮增刪改查,

缺點:

  • 時效性較差,由于是采用定時器根據固定頻率查詢表來同步資料,盡管將同步周期設定到秒級,也還是會存在一定時間的延遲;
  • 對資料庫有一定的輪詢壓力,一種改進方法是將輪詢放到壓力不大的從庫上,

經典方案:借助 Logstash 實作資料同步,其底層實作原理就是根據配置定期使用 SQL 查詢新增的資料寫入 ES 中,實作資料的增量同步,

2.4 基于 Binlog 實時同步

上面三種方案要么有代碼侵入,要么有硬編碼,要么有延遲,那么有沒有一種方案既能保證資料同步的實時性又沒有代入侵入呢?

當然有,可以利用 MySQL 的 Binlog 來進行同步,

圖片

具體步驟如下:

  • 讀取 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,
圖片

下面是 Cannel 執行的核心流程,其中 Binlog Parser 主要負責 Binlog 的提取、決議和推送,EventSink 負責資料的過濾 、路由和加工,僅作了解即可,

圖片

3.2 阿里云 DTS

資料傳輸服務 DTS(Data Transmission Service)支持 RDBMS、NoSQL、OLAP 等多種資料源之間的資料傳輸,

它提供了資料遷移、實時資料訂閱及資料實時同步等多種資料傳輸方式,相對于第三方資料流工具,DTS 提供豐富多樣、高性能、高安全可靠的傳輸鏈路,同時它提供了諸多便利功能,極大方便了傳輸鏈路的創建及管理,

特點:

  • 多資料源:支持 RDBMS、NoSQL、OLAP 等多種資料源間的資料傳輸;
  • 多傳輸方式:支持多種傳輸方式,包括資料遷移、實時資料訂閱及資料實時同步;
  • 高性能:底層采用了多種性能優化措施,全量資料遷移高峰期時性能可以達到70MB/s,20萬的TPS,使用高規格服務器來保證每條遷移或同步鏈路都能擁有良好的傳輸性能;
  • 高可用:底層為服務集群,如果集群內任何一個節點宕機或發生故障,控制中心都能夠將這個節點上的所有任務快速切換到其他節點上,鏈路穩定性高;
  • 簡單易用:提供可視化管理界面,提供向導式的鏈路創建流程,用戶可以在其控制臺簡單輕松地創建傳輸鏈路;
  • 需要付費,

再看看 DTS 的系統架構,

圖片
  • 高可用:資料傳輸服務內部每個模塊都有主備架構,保證系統高可用,容災系統實時檢測每個節點的健康狀況,一旦發現某個節點例外,會將鏈路快速切換到其他節點,
  • 資料源地址動態適配:對于資料訂閱及同步鏈路,容災系統還會監測資料源的連接地址切換等變更操作,一旦發現資料源發生連接地址變更,它會動態適配資料源新的連接方式,在資料源變更的情況下,保證鏈路的穩定性,

更多內容,請查看阿里官方檔案:https://help.aliyun.com/product/26590.html

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,

圖片
  • 快速變化的消費者直接從 Relay 中取事件;
  • 如果一個消費者的資料更新大幅落后,它要的資料就不在 Relay 的日志中,而是需要請求 Bootstrap 服務,回傳的將會是自消費者上次處理變更之后的所有資料變更快照,

開源地址:https://github.com/linkedin/databus

3.4 其它

Flink

  • 有界資料流和無界資料流上進行有狀態計算分布式處理引擎和框架,
  • 官網地址:https://flink.apache.org

CloudCanal

  • 資料同步遷移系統,商業產品,
  • 官網地址:https://www.clougence.com/?utm_source=wwek

Maxwell

  • 使用簡單,直接將資料變更輸出為json字串,不需要再撰寫客戶端,
  • 官網地址:http://maxwells-daemon.io

DRD

  • 阿里巴巴集團自主研發的分布式資料庫中間件產品,專注于解決單機關系型資料庫擴展性問題,具備輕量(無狀態)、靈活、穩定、高效等特性,
  • 官方地址:https://www.aliyun.com/product/drds

yugong

  • 幫助用戶完成從 Oracle 資料遷移到 MySQL,
  • 訪問地址:https://github.com/alibaba/yugong

4. 后記

通過這篇文章,讓你知道 MySQL 和其它多維資料的同步方案,以及常用的資料遷移工具,幫助你更好選型,

 

作者|樓仔

本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/Four-data-synchronization-schemes-to-Elasticsearch.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554244.html

標籤:MySQL

上一篇:大白話講解資料庫的三級模式及二級映像(所謂的內外模式在生活中到底是什么東西?)

下一篇:返回列表

標籤雲
其他(160299) Python(38201) JavaScript(25475) Java(18185) C(15236) 區塊鏈(8269) C#(7972) AI(7469) 爪哇(7425) MySQL(7229) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5346) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4582) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1981) 功能(1967) HtmlCss(1952) Web開發(1951) C++(1928) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 4種資料同步到Elasticsearch方案

    上周聽到公司同事分享 MySQL 同步資料到 ES 的方案,發現很有意思,感覺有必要將這塊知識點再總結提煉一下,就有了這篇文章。 本文會先講述資料同步的 4 種方案,并給出常用資料遷移工具,干貨滿滿! 不 BB,上文章目錄: 1. 前言 在實際專案開發中,我們經常將 MySQL 作為業務資料庫,ES ......

    uj5u.com 2023-06-04 08:08:37 more
  • 大白話講解資料庫的三級模式及二級映像(所謂的內外模式在生活中到

    具象化理解資料庫的三級模式及二級映像 形象一點來說,把資料看做貨物,資料庫是倉庫,模式就是表格。 你有一個倉庫,倉庫里成千上萬的貨物,隨便你怎么堆,你堆個正方體,堆個圓柱體,甚至隨便亂堆都行,你怎么堆的叫內模式。 完事你寫了一張表,表上對全部貨物按某個標準分類,而且標清了啥貨物在哪(這個操作就是從內 ......

    uj5u.com 2023-06-04 08:08:23 more
  • 一篇搞定MySQL索引長度(key_len)計算規則

    MySQL索引長度(key_len)計算 計算規則 索引欄位:沒有設定 NOT NULL,則需要加 1 個位元組。 定長欄位:tinyint 占 1 個位元組、int 占 4個位元組、bitint 占 8 個位元組、date 占 3個位元組、datetime 占 5 個位元組、char(n) 占 n 個位元組。 ......

    uj5u.com 2023-06-04 08:08:19 more
  • 03_事務隔離

    # 03_事務隔離 ### 事務隔離 事務需要保證一組資料庫操作,要么全部成功,要么全部失敗; MySQL事務隔離性是保證資料一致性和并發控制的重要手段之一,它對于多個事務同時訪問和修改同一資料的情況下,能夠保證事務之間的獨立性和隔離性,避免資料的不一致和沖突。 ACID是MySQL事務的四個特性, ......

    uj5u.com 2023-06-03 08:47:27 more
  • 讀改變未來的九大演算法筆記02_資料庫

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230602231102469-1389179464.png) # 1. 基礎思想 ## 1.1. 預寫日志記錄 ## 1.2. 兩階段提交 ## 1.3. 關系資料庫 # 2 ......

    uj5u.com 2023-06-03 08:47:19 more
  • 02_重要的兩個日志 redo log 和 binlog

    # 02_重要的兩個日志 redo log 和 binlog MySQL 45 講Note: 課程專欄名稱:《MySQL實戰45講》課程 筆記參考:[MYSQL45 講](https://gitee.com/moxi159753/LearningNotes/tree/master/MySQL/MyS ......

    uj5u.com 2023-06-03 08:47:10 more
  • Redis(一) -- 基礎

    # Redis Redis是一個開源(BSD許可高性能的記憶體存盤的key-value資料庫! 可用作資料庫,高速快取和訊息佇列代理。它支持字串、哈希表、串列(List)、集合(Set)、有序集合(Ordered Sets),位圖(bitmap),hyperloglogs,GEO等資料型別。內置復制 ......

    uj5u.com 2023-06-03 08:47:03 more
  • SQLite教程1

    ## 0簡介 在這個SQLite初學者教程中,我們用詳細的例子涵蓋了所有關于SQLite的基礎到高級主題。本課程將通過簡單易懂的主題和例子幫助你學習SQLite。 ### 什么是SQLite? SQLite是一個開源的、嵌入式的、關系型的資料庫管理系統,大約設計于2000年。它是一個輕量級的資料庫, ......

    uj5u.com 2023-06-03 08:46:50 more
  • 執行計劃快取,Prepared Statement性能躍升的秘密

    摘要:一起看一下GaussDB(for MySQL)是如何對執行計劃進行快取并加速Prepared Statement性能的。 本文分享自華為云社區《執行計劃快取,Prepared Statement性能躍升的秘密》,作者: GaussDB 資料庫。 引言 在資料庫系統中,SQL(Structure ......

    uj5u.com 2023-06-03 08:46:23 more
  • 2個場景實體講解GaussDB(DWS)基表統計資訊估算不準的處理方案

    摘要:通過2個實體場景講解GaussDB(DWS)運維解決方案。 本文分享自華為云社區《GaussDB(DWS)運維 -- 基表統計資訊估算不準的常見場景及處理方案》,作者:譡里個檔。 場景1:基表過濾欄位存在的隱式型別時,基表行數估算偏小 這種場景絕大部分場景DWS能夠處理,但是如果隱式型別轉后的 ......

    uj5u.com 2023-06-03 08:46:17 more