隨著資料整合需求的增長,Apache SeaTunnel作為新一代的資料同步引擎,不僅在技術架構上不斷演進,也在AI領域展現出其獨特的應用價值。在CommunityOverCode Asia 2024大會上,Apache SeaTunnel PMC Chair 高俊 深入探討SeaTunnel的技術演進路徑,分析其在AI領域的應用案例,並展望未來的發展規劃。
https://www.bilibili.com/video/BV1NCs5eMEA8/?vd_source=e139ecc995ab936267a7991b9de55f6c
從0構建一個資料整合系統
構建資料整合系統的初衷,是因為我們面臨著多種資料來源到目標資料庫的同步問題,如MySQL到MySQL、PostgreSQL到Oracle等。由於資料來源眾多,促使我們設計了靈活的源聯結器和目標聯結器。
Source聯結器&Sink聯結器
SeaTunnel的設計,是在資料來源和目標端之間進行抽象,透過SPI的方式進行外掛化載入,將資料從源端寫到目標端。
表結構同步
如果目標端沒有源端的表結構,則需要構建一個CatalogTable介面,來讀取源端表結構的構造,得到一個類似於MySQL的表格,再轉化為目標端對應的表結構。這樣,在不同的資料流轉之前,先把表結構進行流轉,透過簡單的程式碼就可以實現高效的資料佇列和表結構同步機制。
並行化挑戰
在設計SeaTunnel時,我們特別關注了並行化處理的多個方面,包括任務的建立、執行位置、啟動與關閉、資料分片以及任務與作業間的狀態流管理。SeaTunnel把單執行緒變為多執行緒處理任務,列舉器透過不同演算法把成千上完的資料拆分成例項,送到Source Reader中,每個Reader負責執行一個SQL查詢,從而進行資料的並行讀取。
SeaTunnel引擎
這麼多的任務示例,它們何時開始、何時結束、執行時長,執行的順序是什麼?這就需要一個引擎來規劃例項的執行計劃。這就是SeaTunnel引擎發揮作用的地方,它的核心是提供一個統一的資料同步與整合解決方案,支援多種資料來源和目標,並能夠處理大規模資料流。
Apache SeaTunnel誕生
可以看到,之所以出現越來越多的複雜的資料整合引擎,是出於各種需求而不斷演進。在這樣的背景下,Apache SeaTunnel應運而生。
設計目標
SeaTunnel的設計目標:
- 簡單易用:透過簡單的配置和命令即可建立同步任務和執行同步任務;
- 同步過程可監控、指標可量化:同步過程中自動統計任務讀取寫入的資料量,效能指標,資料延時等資訊
- 豐富的資料來源生態:支援國內外資料庫、訊息佇列、雲端儲存、雲元件、資料湖、倉、SaaS服務、支援使用者自定義資料來源
- 全場景支援:支援所有資料整合場景,包括離線、實時、全量、增量、CDC、CDC整庫同步、DDL變更、動態加表
- 資料一致性保障:資料不丟失、不重複、精確處理一次、支援斷點續傳
- 資源使用少:包括記憶體最佳化、CPU執行緒最佳化、多表同步資料庫連線共享
架構概覽
SeaTunnel的架構由目標資料庫、源資料庫,以及資料同步與整合元件構成。中間部分的抽象API包括Table API、Source API、Sink API、Engine API、Catalog API、Type Converter API等一系列API組成,基於這一系列API實現的聯結器可以執行在多種引擎上,包括原生支援的SeaTunnel Zeta引擎,這是目前我們經過測試數最快的資料同步引擎。同時,SeaTunnel支援透過翻譯層將API開發的聯結器翻譯成Spark和FlinkConnector,從而支援執行在Spark和Flink引擎上。
目前,SeaTunnel社群支援的資料來源聯結器達到160+,後續也還在進行快速迭代更新。
聯結器API與引擎解耦
SeaTunnel是針對資料整合場景而設計的資料同步工具,它提供了一套完整的聯結器API,包括源、轉換、目標、檢查點和翻譯API,支援多引擎、多版本。解決了與計算引擎解耦的問題,同時提供了流批統一處理API和JDBC多路複用功能。
Source聯結器
SeaTunnel的源聯結器支援離線和實時操作模式,透過環境配置中的作業模式輕鬆切換。Source可以實現並行讀取、動態分片發現、欄位投影、多表讀取、精確一次語義支援,以及適配Zeta、Spark和Flink的Checkpoint機制。
Sink聯結器
透過在環境配置中將 job.mode
指定為 BATCH 或 DataMING,SeaTunnel的同一Sink聯結器可以輕鬆地在離線和實時同步模式之間切換。
SeaTunnel的Sink聯結器支援以下功能:
- 支援SaveMode,靈活選擇目標效能和資料處理方式
- 自動建立表,支援模板修改表建立,在多表同步場景下解放雙手
- 精確一次語義支援,資料不會丟失或複製,Checkpoint機制適配 Zeta、Spark、Flink引擎
- CDC支援,支援處理資料庫日誌事件
CDC聯結器
SeaTunnel的CDC(Change Data Capture)主要用來做CDC的同步,聯結器支援無鎖快照讀取,動態發現表,多表同步和多表寫入,Schema evolution,checkpoint,以及CDC批次資料同步,適應了離線資料同步的需求。
多表同步
SeaTunnel支援多表資料讀取和寫入,透過簡單配置,即可實現多表資料的快速讀取和寫入。
新一代資料同步引擎-SeaTunnel Zeta
SeaTunnel Zeta作為新一代的資料同步引擎,具有其他計算引擎所不具備的一些特性:
- 不依賴第三方元件和大資料平臺;
- 無主,內建分散式網格可持久化儲存記憶體;
- 支援WAL,即使整個叢集重啟也能恢復之前的作業;
- 支援分散式快照演算法,保障資料一致性;
- 支援更細粒度的資料同步監控指標;
- 支援事件通知機制;
- 類載入器隔離和快取,提高了系統的穩定性和效能。
SeaTunnel在AI領域的應用
社群近期在AI領域應用方面進行了一些工作,除了常規資料型別之外,還新增了對多種向量資料型別的支援,比如BINARY_VECTOR、FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR、SPARSE_FLOAT_VECTOR等,為AI領域的資料處理提供了強大支援。
後續,社群還計劃推出專門的Transform,針對向量資料型別進行精確處理。
目前,SeaTunnel 2.3.6版本已經提供了Milvus的源和目標聯結器,使得AI應用能夠更高效地處理向量資料。
最新規劃
為了使SeaTunnel能夠滿足更多使用者需求,社群近期也在計劃一些新功能的新增和最佳化工作。
引入SeaTunnel Zeta Master/Worker新架構
SeaTunnel Zeta引入了Master/Worker新架構,這種架構允許在同一個環境中同時執行多個版本的 Hadoop 或 Hive 同步任務。
Note:由於稿件整理的時間差,實際上這一點在最新版本2.3.6中已經實現。
使用SQL建立SeaTunnel作業
SeaTunnel Zeta支援使用SQL語句直接建立資料同步任務,簡化了作業配置過程。
Note:由於稿件整理的時間差,實際上這一點在最新版本2.3.6中已經實現。
Zeta CDC的改進
Zeta CDC改進了空閒讀取器的同步釋放機制,最佳化了快照讀取和實時增量讀取階段的效能。
ClassLoader隔離改進
透過重構ClassLoader和外掛載入機制,SeaTunnel Zeta能夠在同一個環境中同時執行多個版本的Hadoop或Hive同步任務,提高了系統的相容性和靈活性。
Note:由於稿件整理的時間差,實際上這一點在最新版本2.3.6中已經實現。
CDC同步監控最佳化
SeaTunnel的CDC同步將支援DML事件型別粒度的監控指標,提高監控的可觀測性。
支援事件通知機制
SeaTunnel Zeta 支援事件通知機制,可以在資料同步過程中觸發特定的事件通知,增強了系統的互動性和自動化能力。
結語
SeaTunnel作為Apache軟體基金會的頂級專案,其技術架構的演進和在AI領域的應用展示了開源資料整合工具的強大潛力。我們期待與社群共同推動SeaTunnel的進一步發展。如有任何問題或建議,歡迎進入交流群參與討論。
本文由 白鯨開源 提供釋出支援!