Apache SeaTunnel:新一代開源、高性能數(shù)據(jù)集成工具
Apache SeaTunnel 是一款開源、分布式、高性能的數(shù)據(jù)集成工具,可以通過配置快速搭建數(shù)據(jù)管道,支持實(shí)時(shí)海量數(shù)據(jù)同步。
Apache SeaTunnel 專注于數(shù)據(jù)集成和數(shù)據(jù)同步,主要旨在解決數(shù)據(jù)集成領(lǐng)域的常見問題:
- 數(shù)據(jù)源多樣性:常用數(shù)據(jù)源有數(shù)百種,版本不兼容。 隨著新技術(shù)的出現(xiàn),更多的數(shù)據(jù)源不斷出現(xiàn)。用戶很難找到一個(gè)能夠全面、快速支持這些數(shù)據(jù)源的工具。
- 同步場(chǎng)景復(fù)雜:數(shù)據(jù)同步需要支持離線全量同步、離線增量同步、CDC、實(shí)時(shí)同步、全庫(kù)同步等多種同步場(chǎng)景。
- 資源需求量高:現(xiàn)有的數(shù)據(jù)集成和數(shù)據(jù)同步工具往往需要大量的計(jì)算資源或 JDBC 連接資源來完成海量小表的實(shí)時(shí)同步。 這增加了企業(yè)的負(fù)擔(dān)。
- 缺乏質(zhì)量監(jiān)控:數(shù)據(jù)集成和同步過程經(jīng)常會(huì)出現(xiàn)數(shù)據(jù)丟失或重復(fù)的情況。 同步過程缺乏監(jiān)控,無法直觀了解任務(wù)過程中數(shù)據(jù)的真實(shí)情況。
- 技術(shù)棧復(fù)雜性:企業(yè)使用的技術(shù)組件不同,用戶需要針對(duì)不同組件開發(fā)相應(yīng)的同步程序來完成數(shù)據(jù)集成。
- 管理維護(hù)困難:受限于底層技術(shù)組件(Flink/Spark)不同,離線同步和實(shí)時(shí)同步往往需要分開開發(fā)和管理,增加了管理和維護(hù)的難度。
目前已有上百家公司和組織將 Apache SeaTunnel 用于研究、生產(chǎn)和商業(yè)產(chǎn)品。
系統(tǒng)架構(gòu)
Apache SeaTunnel 的運(yùn)行流程如下圖所示。
用戶配置作業(yè)信息并選擇提交作業(yè)的執(zhí)行引擎,然后輸入連接器(Source Connector)負(fù)責(zé)并行讀取數(shù)據(jù)并將數(shù)據(jù)發(fā)送到下游的轉(zhuǎn)換連接器(Transform)或直接發(fā)送到輸出連接器(Sink),Sink 負(fù)責(zé)將數(shù)據(jù)寫入目標(biāo)。 三種連接器都可以支持用戶自定義開發(fā)和擴(kuò)展。
Apache SeaTunnel 是一個(gè) EL(T) 數(shù)據(jù)集成平臺(tái)。 因此,轉(zhuǎn)換連接器只能用于對(duì)數(shù)據(jù)進(jìn)行一些簡(jiǎn)單的轉(zhuǎn)換,例如將一列的數(shù)據(jù)轉(zhuǎn)換為大寫或小寫,更改列名,或者將一列拆分為多列。
Apache SeaTunnel 使用的默認(rèn)引擎是 SeaTunnel Engine; 如果使用 Flink 或者 Spark 引擎,它會(huì)將連接器打包成 Flink 或者 Spark 程序并提交給相應(yīng)的引擎運(yùn)行。
數(shù)據(jù)源
Apache SeaTunnel 目前已經(jīng)能夠支持上百個(gè)數(shù)據(jù)源,包括各種關(guān)系數(shù)據(jù)庫(kù)、圖數(shù)據(jù)庫(kù)、NoSQL、文檔和內(nèi)存數(shù)據(jù)庫(kù)、分布式文件系統(tǒng)(例如 HDFS)以及各種云存儲(chǔ)解決方案(例如 S3 以及 OSS)。同時(shí)還支持很多常見 SaaS 服務(wù)的數(shù)據(jù)讀寫,用戶也可以開發(fā)自己的連接器。
功能特性
Apache SeaTunnel 不同于其他數(shù)據(jù)集成平臺(tái)的功能特性如下:
- 多引擎支持,提供了不依賴于特定執(zhí)行引擎的 Connector API,基于該 API 開發(fā)的三種連接器(Source、Transform、Sink)可以運(yùn)行在不同的引擎之上,例如 SeaTunnel Engine、Flink、Spark 等。
- 插件式連接器,插件式設(shè)計(jì)讓用戶可以輕松開發(fā)自己的 Connector 并將其集成到 Apache SeaTunnel 項(xiàng)目中。目前已經(jīng)支持超過 100 個(gè)連接器,并且數(shù)量正在激增。
- 批流一體,完美兼容離線同步、實(shí)時(shí)同步、全量同步、增量同步等場(chǎng)景,大大降低了管理數(shù)據(jù)集成任務(wù)的難度。
- 支持分布式快照算法,保證數(shù)據(jù)一致性。
- 支持多表或全庫(kù)同步,解決了過度 JDBC 連接的問題;支持多表或全庫(kù)日志讀取解析,解決了CDC多表同步場(chǎng)景下需要處理日志重復(fù)讀取解析的問題。
- 高吞吐量、低延遲,持并行讀寫,提供穩(wěn)定可靠、高吞吐量、低延遲的數(shù)據(jù)同步能力。
- 完善的實(shí)時(shí)監(jiān)控,支持?jǐn)?shù)據(jù)同步過程中每一步的詳細(xì)監(jiān)控信息,讓用戶輕松了解同步任務(wù)讀寫的數(shù)據(jù)數(shù)量、數(shù)據(jù)大小、QPS 等信息。
- 支持兩種作業(yè)開發(fā)方法:可視化開發(fā)以及代碼開發(fā)。
- SeaTunnel Web 項(xiàng)目提供作業(yè)、調(diào)度、運(yùn)行和監(jiān)控功能的可視化管理。
安裝體驗(yàn)
Apache SeaTunnel 支持本地安裝、Docker 以及 K8S 部署方式,使用非常方便。例如,使用 Docker 啟用本地模式的命令如下:
docker pull apache/seatunnel:<version_tag>
目前最新的版本為 2.3.10。當(dāng)下載完成后,可以使用如下命令來提交任務(wù):
# 運(yùn)行作業(yè),從虛擬數(shù)據(jù)源到Console輸出
docker run --rm -it apache/seatunnel:<version_tag> ./bin/seatunnel.sh -m local -c config/v2.batch.config.template
# 使用配置文件運(yùn)行作業(yè),/tmp/job/fake_to_console.conf
docker run --rm -it -v /tmp/job/:/config apache/seatunnel:<version_tag> ./bin/seatunnel.sh -m local -c /config/fake_to_console.conf
# 運(yùn)行時(shí)設(shè)置JVM參數(shù)
docker run --rm -it -v /tmp/job/:/config apache/seatunnel:<version_tag> ./bin/seatunnel.sh -DJvmOption="-Xms4G -Xmx4G" -m local -c /config/fake_to_console.conf
Apache SeaTunnel 官方網(wǎng)站提供了中文文檔,建議直接閱讀。