![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230828185450336-2138333694.png) > 時隔兩個月, Apache SeaTunnel 終於迎來大版本更新。此次發佈的 2.3.3 版本在 ...
時隔兩個月, Apache SeaTunnel 終於迎來大版本更新。此次發佈的 2.3.3 版本在功能和性能上均有較大優化改進,其中大家期待已久的 CDC Schema evolution(DDL 變更同步)、主鍵 Split 拆分、JDBC Sink 自動建表功能、SeaTunnel Zeta 引擎支持 作業配置支持變數替換和傳參等都是更新的亮點。這些功能和優化使得 Apache SeaTunnel 具備了更強大的數據同步能力,大幅提升了 SeaTunnel 的性能。本文將詳細介紹本次更新的具體情況。
CDC 相關更新
支持 Schema evolution
關於 CDC 方面的重要更新,是在架構層面支持了 Schema evolution(DDL 變更同步),這是從架構層面對 DDL 變更事件進行了抽象,包括 Source 和 Sink 中相關介面的添加。另外,我們在 Zeta 引擎中添加了 DDL 變更事件與checkpoint 相關的處理流程。至此,在架構層面,SeaTunnel 已經滿足了支持 DDL 變更同步的所有前提條件,後續就是不同的連接器實現相應的介面,進行 DDL 變更同步的適配工作。
SeaTunnel CDC 相關設計,可參考《解讀重要功能特性:新手入門 Apache SeaTunnel CDC》。
Split 拆分優化
在本次更新之前,CDC Source 讀取時只能基於數值類型的主鍵列進行 Split 的拆分,而在實際使用場景中,很多表沒有主鍵,或者主鍵的數據類型是字元串類型,這會導致無法進行 CDC 同步。本次更新添加了兩個重大 feature:
- 一個是支持唯一索引作為 split 拆分欄位;
- 另一個是支持字元串類型的欄位進行split拆分。
這意味著只要 source 表中擁有主鍵列或者唯一索引列,並且列的類型是數值或者字元串,就能自動進行 split 的拆分,從而快速完成 CDC 的讀取。另外,新版本對於基於字元串類型列進行 split 拆分的演算法進行了優化,經過測試,一張擁有 4 億行,60 個欄位的 MySQL 數據表,針對字元串類型主鍵的 split 拆分由原來的 3 個小時縮短到 20 分鐘。在 JDBC Source 的 partition 拆分中,我們添加了同樣的演算法,從而讓 JDBC Source 針對字元串類型的 split 拆分也得到了優化。
新增加 MongoDB CDC 連接器
同時,SeaTunnel 2.3.3 版本新增了 MongoDB CDC 連接器,也能支持 CDC 同步。
Transform 更新
SQL Transform 支持 select * 和 like 模糊匹配。
select * 可以查詢出從source傳入的所有欄位,在select * 之後可以添加其它欄位用於實現在同步的過程中添加自定義列的效果,比如下麵的示例:
transform {
Sql {
source_table_name = "fake"
result_table_name = "fake1"
query = "select *, current_timestamp as sync_timestamp from fake"
}
}
經過這個Transform的處理,會在source輸入的第一行數據中添加一個sync_timestamp列,該列的值是該行數據經過該Transform時的系統時間戳。
like 模糊匹配用於在Transform對數據數據進行過濾,比如下麵的示例:
transform {
Sql {
source_table_name = "fake"
result_table_name = "fake1"
query = "select *, current_timestamp as sync_timestamp from fake where name like '%Demo_'"
}
}
經過這個Transform處理之後,除了實現了上一個示例添加列的效果之外,還可以對數據進行過濾,只有name欄位的值以Demo_開頭的行才會輸出到下游處理節點(其它Transform節點或Sink節點)。
基礎能力更新
在做 CDC 多表同步的場景下,之前目標表無法自動創建,需要用戶手工在目標端創建好表之後才能進行同步。在本次更新中,添加了 JDBC Sink 自動建表的功能,JDBC Sink 將根據上游傳遞過來的 catalogtable 自動生成創建表的DDL 語句,併在目標資料庫進行建表。
- 註意,很多資料庫都可以使用 JDBC Sink 連接器,但並不是所有資料庫都已經實現了自動建表,本次更新目標端支持自動建表的資料庫有 MySQL, Oracle, Postgres, SQLServer。另外,使用自動建表對 Source Connector 也有要求,Source 連接器必須實現了 Catalog,本次更新中只有 CDC Source 實現了 Catalog,所以自動建表功能只有在 CDC Source 同步到 MySQL/Oracle/Postgres/SQLServer,並且是在多表同步模式下才能生效。
Zeta 引擎更新
-
支持 Schema evolution(DDL變更同步)。
-
Rest API 添加了提交作業的 API,用戶可以使用 Rest API 進行作業的提交。這對於那些自研開發了頁面集成 SeaTunnel 的用戶來說非常重要,這意味著他們不再需要單獨為提交作業安裝 SeaTunnel Client。
示例如下:
network:
rest-api:
enabled: true
endpoint-groups:
CLUSTER_WRITE:
enabled: true
DATA:
enabled: true
join:
tcp-ip:
enabled: true
member-list:
- localhost
port:
auto-increment: true
port-count: 100
port: 5801
具體可參考:https://seatunnel.apache.org/docs/seatunnel-engine/rest-api/#submit-job
- 作業配置支持變數替換和傳參,本次更新之後,用戶可以在作業的 config 文件中使用變數,然後在真正提交作業時通過命令行傳參的方式來動態替換這些變數,藉助這個功能,用戶可以實現離線增量同步功能。
其他功能更新、優化和 Bug 修複
除此之外,新版本還在 SeaTunnel Connector、Zeta 引擎、Transform、CI 等方面進行了重要更新和優化,修複了以往版本的 Bug,並更新了將近 30 個項目文檔,其中包括數十個新增 Connector 的使用文檔說明,為用戶在實際應用場景中進行不同 Connector 的接入提供詳細的指導。
- 詳情參考 Release Note:https://github.com/apache/seatunnel/releases
- 2.3.3 版本下載地址:https://seatunnel.apache.org/download
致謝貢獻者
感謝@劉黎對此次發版的指導與幫助,以及下列貢獻者對本次發版的支持!
貢獻者 GitHub ID
本文由 白鯨開源 提供發佈支持!