Linux中國

使用這個開源工具輕鬆同步資料庫

開源的 Apache SeaTunnel 項目是一個數據整合平台,可以很容易地實現數據同步。

變更數據捕獲 Change Data Capture (CDC)使用服務端代理來記錄、添加、更新和刪除對數據表的各種操作。它以一種易用的關係型格式提供了數據變化的細節信息。它可以捕獲將更改應用於目標環境中的已修改行所需的列信息和元數據。這些信息保存在一個與被跟蹤的源表的列結構相對應的變化表內。

捕獲變更的數據可不是一件容易的事。不過,有一個開源項目 —— Apache SeaTunnel,它是一個數據整合平台,它提供的 CDC 功能的設計理念和功能集使這些捕獲成為可能,其功能包括上文提到的,超越了現有產品的解決方案。

使用場景

CDC 的經典應用是異質資料庫之間的數據同步或備份。你可以在 MySQL、PostgreSQL、MariaDB 和類似的資料庫間進行數據同步。另外一個例子,你也可以將數據同步到應該全文搜索引擎。藉助 CDC,你可以基於 CDC 捕獲的數據創建備份。

如果設計得當,數據分析系統通過訂閱目標數據表的變化情況獲取需要處理的數據,而不需要將分析過程嵌入已有系統。

在微服務間共享數據狀態

微服務現在很流行,但是在微服務間共享信息往往是一件複雜的事。CDC 是一個可能的解決方案。微服務可以使用 CDC 來獲取其他微服務的資料庫變化,獲取數據狀態更新,以及執行相應邏輯。

更新緩存

命令查詢責任隔離 Command Query Responsibility Segregation CQRS)的概念是將命令活動與查詢活動分開。這兩者有本質上的不同:

  • 命令向數據源寫入數據。
  • 查詢從數據源讀取數據。

問題是,讀事件發生的時間與寫事件發生的時間有關,以及這些事件的發生是由誰來承擔責任的?

更新緩存可能很困難。你可以使用 CDC 從資料庫獲取數據更新事件,讓它控制緩存的更新或失效。

CQRS 設計通常使用兩種不同的存儲實例來支持業務查詢和變更操作。為了保證數據的一致性,我們可以使用分散式事務來保證強大的數據一致性,代價是可用性、性能和擴展性。你也可以使用 CDC 來確保最終的數據一致性,它的性能和伸縮性較好,但其代價是數據延遲,目前業界可以保持在毫秒範圍內。

例如,你可以使用 CDC 把 MySQL 中的數據同步到你的全文搜索引擎(比如ElasticSearch)。在這種架構中,ElasticSearch 搜索了所有的查詢,但是當你需要修改數據時,你不能直接操作 ElasticSearch 的,你需要修改上游的 MySQL 數據,因而生成了一個更新事件。當 ElasticSearch 監視資料庫時,這個事件就被系統獲取了,並在 ElasticSearch 中提示更新。

在一些 CQRS 系統中,也可以用類似的方法更新查詢視圖。

痛點

CDC 不是一個新概念,很多現有的項目已經實現了它。但是對很多用戶來說,已有解決方案存在一些不足。

單數據表配置

當你使用一些 CDC 軟體時,你必須分別配置每個表。例如,為了同步十張表,你需要寫十條 源 SQL 和 匯聚 Sink SQL 語句。為了進行轉換操作,你也需要寫與轉換相關的 SQL 語句。

有時候,對於一張表來說可以手寫,但只對數據量小的情況適用。當數據量大時,會發生類型映射或參數配置的錯誤,進而導致較高的操作和維護成本。

SeaTunnel 是一個易用的數據集成平台,有望解決這個問題。

不支持模式演化

一些 CDC 解決方案支持 DDL 事件傳遞,但不支持傳遞到 匯聚節點 Sink ,以便它能進行同步變更。由於無法根據 DDL 事件改變轉換的類型信息,所以即使一個能獲取事件的 CDC 也不一定可以將它發送至引擎(所以匯聚節點不能遵循 DDL 事件來進行變更)。

太多的鏈接

在一些 CDC 平台上,當有多個表時,如果一張表被同步了,就必須使用一個鏈接來代表一張表。當存在多個表時,也需要很多鏈接。這就給源 JDBC 資料庫帶來了壓力,同時導致binlog 過多,還會導致重複的日誌解析。

SeaTunnel CDC 架構的目標

Apache SeaTunnel 是一個開源、高效、分散式、大規模的數據集成框架。為了解決現有數據集成工具解決不了的問題,開發者社區「重新造輪子」,開發了一種具有獨特功能的 CDC 平台。它的架構設計吸收了現有工具的優點,消除了相應的缺點。

Apache Seatunnel 支持:

  • 以無鎖並行的方式快照歷史數據。
  • 日誌心跳檢測和動態添加數據表。
  • 讀取子資料庫、子表和多結構表。
  • 模式演進。
  • 所有基礎的 CDC 功能。

它降低了用戶的操作和維護成本,並且支持動態添加數據表。

例如,當你要同步整個資料庫,並在稍後需要添加一個新表,你不必手動維護、改變配置或重啟當前作業。

另外,Apache SeaTunnel 也支持並行讀取子資料庫、子表和多結構表。還支持模式演進、DDL 轉換,以及在引擎內改變支持的模式,這些可以變為 轉換器 Transform 匯聚節點 Sink

SeaTunnel CDC 現狀

如今,CDC 擁有支持增量和快照階段的基本能力。它也支持 MySQL 實時和離線使用。MySQL 實時測試已完成,即將進行離線測試。因為它涉及對轉換器和匯聚節點的更改,目前還不支持模式。不支持動態發現新增表,已預留了一些支持多結構表的介面。

項目展望

作為 Apache 孵化的項目,Apache SeaTunnel 的社區正快速發展起來。下一屆社區計劃會議的主要目標有:

1、發展並改進連接器和目錄生態

我們正努力改善連接器和目錄功能,包括:

  • 支持連接更多資料庫,包括 TiDB、Doris 和 Stripe。
  • 改善現有的連接器的易用性和性能。
  • 支持 CDC 連接器用於實時、增量同步場景。

任何對連接器感興趣者都可以查看 Umbrella

2、支持更多數據集成場景(SeaTunnel 引擎)

現有的引擎仍然存在一些解決不了的痛點,例如對整個資料庫的同步,表結構變化的同步以及任務失敗的大粒度。

我們正努力解決這些問題,對此感興趣者可以查看 #2272 議題

3、更易使用(Web 版)

我們正努力提供 Web 界面,令操作更簡便。通過 Web 界面,我們將實現以 DAG/SQL 的形式查看目錄、連接器、任務和相關信息。我們也會給予用戶訪問調度平台的許可權,以便更方便地進行任務管理。

欲了解更多關於 Web 版的信息,請訪問 Web 平檯子項目

總結

資料庫活動通常必須被仔細跟蹤,才能對數據的更新、刪除或添加操作進行管理。CDC 提供了這種功能。Apache SeaTunnel 是一個開源解決方案,能滿足這些需求,它將持續迭代更新,從而提供更多功能。該項目和社區也很活躍,歡迎你的加入。

(題圖:MJ:database connections illustration in high resolution, very detailed, 8k)

via: https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel

作者:Li Zongwen 選題:lkxed 譯者:cool-summer-021 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國