大家好,我是白鯨開源的聯合創始人代立冬,同時擔任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作為 Apache Foundation 的成員和孵化器導師,我積極參與推動多個開源項目的發展,幫助它們通過孵化器成長為 Apache 的頂級項目。
今天的分享的主題其實還是從開源到商業,Apache SeaTunnel 本身就是做數據同步軟件,也經歷過 Apache 孵化器的孵化,目前已經畢業成為頂級項目,也會跟大家分享一下它的核心特性。包括為什么我們又重新造輪子,那 Doris 和 WhaleTunnel/SeaTunnel 這個多元實時數倉是怎么去解決一些社區用戶的問題?另外也給大家分享一下我們社區的 roadmap 和最近的一些進展。
白鯨開源愿景與使命
白鯨開源其實是一家 DataOps 解決方案提供商,目前致力于數據調度和同步領域,簡單理解就是大數據的降本增效。我們的目標是通過高效的數據處理解決方案來降低運營成本并提高效率。
當前的重點是改善數據調度和同步的流程,或者是從開發到生產上線整個流程的打通,從而實現從開發到生產的快速過渡。
核心開源項目
我們主要投入于兩個 Apache 頂級開源項目:Apache DolphinScheduler 和 Apache SeaTunnel。
DolphinScheduler 是一個分布式工作流調度平臺,而 SeaTunnel 則專注于數據集成和同步。
這兩個項目在國內影響力也越來越大,在整個大數據生態包括在數據處理和同步方面發揮著關鍵作用。
數據同步中的挑戰
在數據同步領域,我們面臨多種挑戰,處理眾多數據源、版本兼容問題、大數據量帶來的數據丟失或重復問題。比如說像 Oracle,它有很多版本,而且每個版本之間是不兼容的,所以你需要去支持它的 CDC,或者是要能夠去捕獲到它的 DDL 變更這樣的場景,每個版本你都要去考慮怎么去適配,這個工作量是很大的。
此外,如何保證數據的精確一致性,以及在出現問題時如何快速回滾?同步過程中需要監控等等,這些都是數據同步中面臨的痛點問題。
還有一個痛點的情況,就是當你頻繁地去讀取 binlog,對數據源的影響會非常大,DBA 會非常關注對數據庫源數據庫端產生的壓力情況,還有大事務 schema 變更會影響到下游,尤其數據量大的這種場景下,大家都會非常關心!
還有離線跟實時同步,通常以前都是需要分開寫,這也是面臨的問題,就是批是批,流是流,維護會非常的困難。
經常做數據遷移的小伙伴肯定會面臨這樣痛苦的過程,就是我要做數據遷移通常都是要以月/季的,數據遷移幾個月、小半年這樣的一個時間,SeaTunnel 的定位其實就是做一個高性能的數據集成工具,希望能夠更多的像調度工具和上下游的這些工具去打通,我們也歡迎大家能夠去集成 SeaTunnel 去做數據處理的這個事情!
在今年的 6 月,Apache SeaTunnel 正式成為了 Apache 基金會的頂級項目,也是首個國人主導的數據集成項目在 Apache 基金會占了一席之地,它不僅能夠應對每天同步萬億級的數據量非常大的場景,包括在海外現在也有一些很典型的案例,像在美國最大的商業銀行JPMorgan、印度電信、英國最大的零售商等都應用在了生產的環境中,在國內像嗶哩嗶哩、唯品會每天同步上千億的數據,這都是 SeaTunnel 的用戶案例。
SeaTunnel 核心功能與目標
簡單易用
SeaTunnel 的第一個目標是簡單易用。為此,社區最近開源了一個拖拉拽的可視化版本,但距離真正的簡單易用可能還有一些距離。同時,它既支持命令行操作,也支持 Web 可視化的操作。
支持多種數據源
目前,SeaTunnel 已經支持 100 多個數據源。這種廣泛的兼容性使得它可以適應不同的數據環境。
批流一體
SeaTunnel 還支持批流一體的操作,這意味著不需要為批處理和流處理編寫兩套不同的代碼。這種設計可以大大提高開發效率和代碼維護性。
支持整庫同步和自動變更
SeaTunnel 可以支持整庫同步,同時也支持自動變更,這主要解決了數據切割的問題。全量到增量的無鎖自動切換可以大大提高數據處理的效率。
支持讀緩沖和動態速率控制
SeaTunnel 可以支持同一個源同步到多個目標,比如從 MySQL 同步到 Hive 或者 Doris。同時,它還支持動態速率的控制,尤其是源數據庫端的小伙伴會非常關注這個功能。這種設計可以在保證數據處理效率的同時,防止因速率過快導致的資源浪費或者其他問題。
支持 schema 變更和斷點續傳
SeaTunnel 可以支持 schema 變更,即數據庫結構的變化。同時,它還支持斷點續傳和精確一致性,這需要上下游數據庫的配合才能實現。這種設計可以大大提高數據處理的穩定性和準確性。
支持云組件和精確一致性
SeaTunnel 不僅支持各種云組件,如 RedShift、S3、RDS、DynamoDB 等,還支持像阿里云的 OSS File、TableStore 等。
同時,它可以實現精確一致性,這是通過上下游數據庫的配合實現的。這種設計可以大大提高數據處理的可靠性和準確性。
但是像 HDFS 它就做不到這個精確一致。MySQL 這些傳統的數據庫基本上都是可以做到精確一致
比如說我們要從 MySQL 要去同步到 Doris,或者有些場景可能比如說要從 Mongo 去同步,或者是從 Oracle、MySQL 要去同步到這個像 Doris 的這樣的去做 OLAP,去做這個一些實時數倉的一些場景會比較常見一些。比如說它是否能支持雙向同步,我也可以支持各種數據源之間的 Source,以及目標端 Sink,這是它的數據去向。
適用場景
SeaTunnel 適用于從各種數據源到各種目標的數據集成和同步場景。它支持雙向同步,可以支持各種數據源之間的 Source 以及目標端的 Sink。
以前常見的互聯網解決方案,有一些Spark和Flink的場景,那現在你 SeaTunnel 的時候,它會有一個 API,它其實是可以支持跑在 Spark、Flink 上的。它還有一個 Source API,其實是用于擴展各種數據源,我們的目標其實是連接各種數據源,不僅僅是數據庫,那還有 SaaS,還有 API 接口,那還有一些本地的文件數據。
此外,它還支持批量、全量、增量的集成,甚至無主鍵的數據也可以支持。
性能優勢
與一些常見的互聯網解決方案相比,例如 Airbyte 和 Data X 單機版,SeaTunnel 的性能要快 30 多倍。
我們跟 Data X 的 PK 時候只有單機,一般是 30% - 50% 之間,它的單機做得還可以。但是它沒有集群化的版本,也只能做離線的場景。
迭代速度優勢
另一個值得稱贊的是,SeaTunnel 的版本迭代速度非常快,基本上每個月都會發布一個新的版本。這種快速迭代的速度不僅增加了功能的新穎性和實用性,也提高了整個項目的活力和競爭力。
架構簡介
Apache SeaTunnel 的整體架構是無中心化的,類似于 DolphinSchedule 的設計,已經是非常成熟的一個架構了。這種設計可以保證數據從源到目標的流暢傳輸。
它的核心思想是將任務分解成多個 pipeline,如果某個鏈條出現問題,用戶只需回滾相應的鏈條,而不是整個作業。這種設計在時間和資源成本上更加節約,同時也提高了性能。
從上圖左側來說它是支持各種源,有 batch、stream、 CDC 的場景,也有這個各種需要去讀數據 read data,然后讀到 SeaTunnel 這個架構之上,其實就是也有一個 coordinator,是充當了一個 master 的角色,大家把它理解成一個 master,然后 task execution service 其實就是做具體任務的,把它理解成 worker 這樣的一個角色,可以這么去理解, master 是負責去分配這任務,然后 worker 是去執行具體的任務,但 worker 執行任務的時候,它其實會分到底是讀取的任務,還是做數據轉換的任務,還是去寫的任務?
而 read task、write task,或是做 convert transform 的 task,這里邊其實會有 master,還有 resource manager 去做資源管理以及做 pipeline 設計!
此外,SeaTunnel 使用了動態線程共享技術,避免了資源浪費。以 Spark 為例,啟動作業時需要消耗大量的內存,而使用 SeaTunnel 或其商業版 WhaleTunnel,內核可以最大限度地被共享,內核與開源版保持一致。
架構特性
SeaTunnel 支持 Flink 和 Spark,并在近兩年設計了一個專為數據同步場景設計的引擎 Zeta。
盡管 Spark 和 Flink 也是為計算而生的,但數據同步的要求與計算有所不同,它更強調性能、穩定性和支持的數據源數量。因此,我們推薦使用 Zeta 引擎。
此外,SeaTunnel 解決了 Spark 和 Flink 等場景中存在的問題。 任務出錯時需要回滾整個作業; 可視化開發方面也沒有提供完整的解決方案; 對于資源占用過多的場景,一個 task 只能處理一張表,這可能導致資源浪費和影響 DBA 業務場景; 以及對表結構變更、CDC 等場景的不支持。
而 SeaTunnel 正是為了解決這些問題而設計的。
解耦設計
另一個重要的特性是 SeaTunnel 與執行引擎解耦。最早的版本只支持 Spark,但隨著 Spark 版本的升級,我們面臨著兼容性問題。每個 Connector 都需要為不同的版本重新設計實現,這是一項耗時且繁瑣的工作。因此,我們定義了一套 SeaTunnel 自己的 API,與具體的執行引擎解耦。這樣,當新的更快、更高性能的數據引擎出現時,我們只需要更新 Connector 即可。
此外,我們還提供了 Source API、Sink API、checkpoint API 和 translation 層等多種 API,通過翻譯層將每個卡點翻譯成 Flink、Spark、Zata 等不同引擎的底層 API,避免了每個 Connector 都需要適配的問題。同時,也支持流批一體的新 Connector,只需按 API 實現一次即可。
總之,SeaTunnel 的架構和特性使其成為解決數據同步等場景的理想選擇。它不僅提供了簡單易用的界面和強大的功能,還通過與執行引擎解耦和多種 API 的支持提高了效率和性能。
無中心化設計
前面提到了 SeaTunnel 采用了無中心化的設計,每個 server 都可以充當 master 的角色,也可以充當 worker 的角色。這種設計具有自動選舉功能,確保了系統的穩定性和可靠性。
同時,它還支持彈性的伸縮,例如在進行精確處理時,會涉及到 checkpoint 以及分布式快照的創建,以確保數據的完整性和一致性。
這種設計也支持斷點續傳,對于因異常導致的數據傳輸中斷,可以自動回退到上一個切割方向的點,保證數據傳輸的連續性和完整性。
性能測試與對比
為了測試 SeaTunnel 的性能,我們進行了一些場景的測試。
從 MySQL 到 Hive,PG 到 Hive,SQL Server 到 Hive 和 Oracle 到 Hive 的場景中,SeaTunnel 的同步速度比 Data X快 30%-50%。
在云同步的場景中,SeaTunnel 的表現更為出色,其性能是 Airbat 的 30 多倍,與 AWS 的數據同步工具 Glue 相比,也快2-5 倍。
我們還對比了 SeaTunnel 與 Data X、Sqoop、Flume 等數據集成工具。這些工具在支持自動建表、整庫同步、斷點續傳、離線增量和 CDC 等方面的能力各有不同。
其中,Data X 社區雖然已經不再維護,但其用戶仍然較多。然而,大多數場景中,Data X 并不能提供很好的支持。相比之下,SeaTunnel 在這些方面表現出色。
支持多種數據源
SeaTunnel 支持多種數據源,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。
它還支持將數據同步到 Doris 等數據庫。用戶可以通過可視化的界面配置數據源信息,而不需要為每個任務都手動配置。
字段映射
狀態監控
此外,SeaTunnel 還支持流的導入、MySQL 的 CDC 等特性,并支持多表同步或整庫同步等場景。
實時數倉方案
白鯨開源基于 Apache DolphinScheduler 和 Apache SeaTunnel 打造的商業產品 WhaleStudio ,是分布式、云原生并帶有強大可視化界面的 DataOps 系統,增加了商業客戶所需的企業級特性:
- 全面支持云原生—云、倉、湖 實時/離線批流一體化任務管控
- 低代碼實現企業大數據的高可用調度和海量數據批量/實時同步
- 完善的 DataOps 流程可無縫集成代碼工具
- 豐富的數據源對接和傳統 ETL 數據組件支持
- 增強可觀測性和操作性,提高運維與任務運行態人工干預能力
- 復雜時間的管理優化&靈活多樣的觸發機制&強大的數據科學平臺支持
- 完善的權限控制&審計系統等
在 Whalestudio 中,DolphinScheduler 和 SeaTunnel 被視為兩個獨立的模塊,但它們共享一些共同的功能,例如數據源中心的配置只需要進行一次。這種設計使得數據同步和調度更加高效和便捷。
首先,我們需要明白開源并不意味著無限制的免費。在開源世界中,每個項目都有其邊界,只有將項目做得非常垂直,才能更好地進行迭代和創新。
因此,我們的開源理念是專注于將項目做得更精細、更垂直,以實現更好的可迭代性。與商業理念不同的是,開源強調的是共享和協作,而商業則更注重整體解決方案和客戶的需求。
SeaTunnel 是一個開源項目。在商業版 WhaleStudio 當中,IDE 和可視化配置能力是其中的重要組成部分,它們可以幫助用戶輕松地進行 SQL 編寫、Python 編程以及業務日期切分等操作。此外,我們還在商業版中提供了一些額外的功能,例如對監管報送等數據的加權處理,以及更豐富的連接器支持。
支持虛擬表
在開源項目中,我們有一個虛擬表的抽象概念。比如說 Kafka、文件這些我們都把它抽象成表,這方便后邊去做字段的映射。比如說要去讀 Excel 的數據,讀到 Doris,或者說其他的數據庫,比如說 MySQL,那前面做好了映射,虛擬表建好,后邊只是去拖拽一下就 OK 了,不需要再去做這個映射配置這么復雜的事情,我們前陣子跟 SelectDB 做了一個商業的聯合解決方案,就是 SelectDB 加上 WhaleTunnel。
在這個場景中,各種產品充當著不同的角色。SelectDB 用于實時數倉,主要處理數據分析和查詢。WhaleTunnel 用于數據同步和導入,它可以從各種數據源獲取數據并將其導入到目標位置。WhaleScheduler 用于協調和調度這些任務,確保數據在正確的時間被處理。
這些產品共同構成了一個完整的數據同步和集成解決方案,可以輕松地處理各種數據源,并通過調度和同步機制將數據導入到實時數倉中進行分析。這種方案具有高效、靈活和可擴展的優點,可以幫助用戶快速實現從開發到生產上線的整個流程。
同時,這個解決方案還提供了一些額外的功能,如調試、IDE 支持和數據工作流的血緣關系分析等,這些功能都是在商業版中提供的。用戶可以通過這個方案獲得更全面的數據同步、集成和分析能力,從而更好地管理和利用用戶的數據資產。
Roadmap
在未來的發展計劃中,我們將繼續豐富連接器支持,例如增加對 Oracle CDC 和 Mongo DB CDC 的支持。同時,我們也將提供更多可插拔能力,以便用戶可以根據自己的需求進行定制。
此外,我們還將與主流的調度系統集成,例如 Apache DolphinScheduler 和 Airflow,以提供更全面的解決方案。
最后,我們還將支持 K8S operator 場景,以幫助用戶更好地管理和調度他們的數據工作流。
總之,我們的目標是讓中國的開源項目走向世界,讓更多的人了解并參與到開源項目中來。
無論您是開源的支持者還是商業化的擁護者,我們都歡迎您加入到我們的大家庭中來。謝謝大家!
本文由 白鯨開源科技 提供發布支持!