把數(shù)套數(shù)據(jù)傳輸通道一鍵“折疊”成 SeaTunnel:同程工程師周曉晨的實(shí)戰(zhàn)筆記
周曉晨,在同程旅行負(fù)責(zé)數(shù)據(jù)通道建設(shè),Apache SeaTunnel 深度貢獻(xiàn)者。從 2022 年為 Apache Kylin 提交第一行 PR 起,他已在 StarRocks、Paimon、Scala 動(dòng)態(tài)編譯、SeaTunnel-Web 等十余個(gè)核心模塊留下印記。本文將以“選型—落地—共建—展望”為主線,透視同程旅行如何把 SeaTunnel 從備選方案變成統(tǒng)一數(shù)據(jù)通道,并通過 Operator、Sqoop 遷移工具、Fluss Connector、Scala 編譯等二次開發(fā),讓開源項(xiàng)目真正長(zhǎng)在企業(yè)的土壤上;也記錄了一位程序員如何在社區(qū)里完成“使用者→貢獻(xiàn)者→深度貢獻(xiàn)者”的身份蛻變。
個(gè)人介紹:在旅行與代碼之間切換的“多面手”
周曉晨,現(xiàn)任同程旅行數(shù)據(jù)通道負(fù)責(zé)人,GitHub ID “xiaochen-zhou”。日常除了與 Paimon 和 StarRocks 等數(shù)據(jù)庫(kù)打交道,他還是一位軍迷和鐵桿球迷——綠茵場(chǎng)上的戰(zhàn)術(shù)推演與碼海中的架構(gòu)設(shè)計(jì),在他眼里都是同一套“排兵布陣”的藝術(shù)。

正是對(duì)“連接”與“協(xié)同”的癡迷,讓他在 2022 年第一次把代碼 Push 到了 Apache Kylin。自此,他在開源世界的旅程正式啟程。
社區(qū)貢獻(xiàn)一覽:把“踩坑”變成“鋪路”
- StarRocks 連接器增強(qiáng)
- 支持 FE 節(jié)點(diǎn)的高可用: #6792
- 支持多表讀取: #8789
- 修復(fù) Starrocks 在設(shè)置 QUERY_TABLET_SIZE 參數(shù)下的數(shù)據(jù)丟失問題:#8768
- Paimon 連接器增強(qiáng)
- 支持 Like(#9484)、Between(#8962) 謂詞下推
- 支持 Time 類型: #8880
- 修復(fù) DECIMAL 類型轉(zhuǎn)換過程中的精度丟失: #9480
- 支持 Scala 動(dòng)態(tài)編譯
在社區(qū) Java 和 Groovy 的基礎(chǔ)上,新增對(duì) Scala 動(dòng)態(tài)編譯的支持,以便更好地與大數(shù)據(jù)生態(tài)進(jìn)行集成 #9625 - Transform 插件集成 Zhipu AI: #8790
這些看似零散的 PR,最終在同程旅行的技術(shù)選型過程中被串成了一條“證據(jù)鏈”——證明 SeaTunnel 不只是“能用”,而且“好用”“敢用”。
為什么同程旅行選擇了 SeaTunnel?
目前,同程旅行已在某個(gè)新業(yè)務(wù)的數(shù)據(jù)通道服務(wù)采用了 Apache SeaTunnel。周曉晨表示,后續(xù)公司有在更大范圍內(nèi)應(yīng)用 Apache SeaTunnel 的計(jì)劃,以逐步實(shí)現(xiàn)數(shù)據(jù)通道組件的統(tǒng)一。
現(xiàn)在來(lái)看,公司現(xiàn)有的數(shù)據(jù)通道組件包括 Sqoop 和內(nèi)部自研的實(shí)時(shí)及批處理組件。而未來(lái),SeaTunnel 將作為統(tǒng)一的解決方案,整合并替代現(xiàn)有的數(shù)據(jù)通道組件。
Apache SeaTunnel 之所以被同程旅行采用并被錨定為數(shù)據(jù)通道的統(tǒng)一解決方案,是因?yàn)樗墙?jīng)過公司進(jìn)行全方位的競(jìng)品對(duì)比分析后,精挑細(xì)選出來(lái)的最適合公司場(chǎng)景需求的產(chǎn)品。
周曉晨認(rèn)為,公司最終采用 Apache SeaTunnel,主要基于以下幾個(gè)方面的考慮:
- 社區(qū)活躍度高=問題響應(yīng)速度快
Apache SeaTunnel 擁有一個(gè)非常活躍的開源社區(qū),開發(fā)者和用戶的參與度都很高。在社區(qū)中,問題能夠快速得到響應(yīng),功能需求也能得到及時(shí)的反饋和迭代。這種活躍的社區(qū)生態(tài),不僅能提供持續(xù)的技術(shù)支持,還能幫助我們快速解決實(shí)際問題。 - 專為數(shù)據(jù)同步而生的“超跑”——Zeta 引擎
Apache SeaTunnel 內(nèi)置的 Zeta 引擎是專門為高效數(shù)據(jù)同步設(shè)計(jì)的。相比通用型的數(shù)據(jù)處理框架,Zeta 引擎在數(shù)據(jù)同步場(chǎng)景中有著更優(yōu)的性能表現(xiàn)和更低的資源消耗。 - 批流一體的架構(gòu)設(shè)計(jì)=一套 DSL 打天下
Apache SeaTunnel 的批流一體架構(gòu)非常靈活,這種統(tǒng)一的架構(gòu)設(shè)計(jì),減少了我們?cè)诓煌瑘?chǎng)景下切換工具的復(fù)雜性,同時(shí)也讓開發(fā)和維護(hù)更加高效。
綜合來(lái)看,Apache SeaTunnel 在性能、功能以及社區(qū)支持等方面都非常符合其場(chǎng)景的求,因此最終成為不二之選。
選型只是起點(diǎn),真正的挑戰(zhàn)是如何讓 Apache SeaTunnel 在復(fù)雜的存量架構(gòu)里“無(wú)感落地”。于是,二次開發(fā)逐漸展開。
基于SeaTunnel的二次開發(fā)
基于 Apache SeaTunnel,同程旅行的二開主要圍繞以下幾個(gè)方面展開:
1. SeaTunnel-Operator
目前,公司各部門的組件正在逐步向云原生架構(gòu)遷移,而公司現(xiàn)有的云平臺(tái)僅支持通過 Operator 的方式進(jìn)行部署。為了更好地支持云原生環(huán)境下的 Apache SeaTunnel 部署,公司開發(fā)了 SeaTunnel-Operator,以實(shí)現(xiàn)更高效的管理和部署。
2. Sqoop 任務(wù)遷移工具
目前,公司用于數(shù)據(jù)傳輸?shù)姆?wù)較為分散,包含 3~4 套不同的系統(tǒng),包括開源的 Sqoop,以及內(nèi)部分別用于實(shí)時(shí)數(shù)據(jù)傳輸和批處理的通道組件。為了提升數(shù)據(jù)傳輸服務(wù)的統(tǒng)一性和效率,公司的目標(biāo)是基于 Apache SeaTunnel 構(gòu)建一個(gè)統(tǒng)一的數(shù)據(jù)通道,替換現(xiàn)有的幾個(gè)分散服務(wù)。
為實(shí)現(xiàn)這一目標(biāo),同程旅行開發(fā)了一套工具,用于將現(xiàn)有服務(wù)(包括 Sqoop 等)的腳本自動(dòng)轉(zhuǎn)化為 Apache SeaTunnel 的腳本,以實(shí)現(xiàn)任務(wù)無(wú)縫遷移。
3. Fluss Connector
當(dāng)前,部門正在部分業(yè)務(wù)中落地 Fluss 組件。為更好地適配業(yè)務(wù)需求,部門已增加對(duì) Fluss 的支持,實(shí)現(xiàn)了新業(yè)務(wù)自檢“即插即用”。
4. Scala 動(dòng)態(tài)編譯
為更好地支持大數(shù)據(jù)生態(tài),公司在社區(qū)動(dòng)態(tài)編譯的基礎(chǔ)上支持了 scala 語(yǔ)言的動(dòng)態(tài)編譯,打通了大數(shù)據(jù)生態(tài)的最后一公里。
此外,同程旅行的二開還涉及到一些臟數(shù)據(jù)收集及管理等特性的開發(fā),在此不再贅述。
當(dāng)二次開發(fā)把“能用”升級(jí)為“好用”,周曉晨開始思考:還能為社區(qū)回饋什么?
對(duì)于SeaTunnel的期待:Web 的下一程
和很多 Apache SeaTunnel 的用戶一樣,周曉晨同樣非常期待 SeaTunnel-Web 的功能能夠更加豐富。“SeaTunnel-Web 能不能再絲滑一點(diǎn)?” 他希望更多前端、產(chǎn)品、運(yùn)營(yíng)背景的貢獻(xiàn)者加入,讓配置、血緣、監(jiān)控、告警像“搭樂高”一樣直觀。
向外呼吁的同時(shí),他也向內(nèi)審視,把自己三年多的開源故事提煉成一條可復(fù)制的方法論。
個(gè)人開源之路:從 PR 到 Community
2022 → 2025,周曉晨用親身經(jīng)歷寫下注腳:
2022 年,我第一次給 Apache Kylin 提交的 PR 被合并,到現(xiàn)在已經(jīng)過去 3 年多了。開源真的很有意思,能讓我和全球的程序員一起交流、學(xué)習(xí),大家為了同一個(gè)項(xiàng)目、同一個(gè)目標(biāo)一起努力。
作為一個(gè)開源愛好者,周曉晨對(duì)于開源,以及開源社區(qū)的建設(shè)有著自己的深刻見解。Contributor 是社區(qū)最小卻最活躍的細(xì)胞——每一次 Commit、每一次 Code Review、每一次 Issue 回復(fù),都在為項(xiàng)目注入新的基因。他們不僅僅是技術(shù)貢獻(xiàn)者,通過代碼、文檔、測(cè)試、反饋等多種形式,為項(xiàng)目的不斷完善和進(jìn)步貢獻(xiàn)力量。同時(shí),Contributor 也是社區(qū)文化的踐行者。
從大家在 GitHub 和社區(qū)群里的交流中,周曉晨感受到 Apache SeaTunnel 社區(qū)不僅是一個(gè)專業(yè)和包容的社區(qū),更是一個(gè)充滿趣味和活力的社區(qū)。如果你正在尋找一個(gè)能把代碼價(jià)值放大 100 倍的地方,SeaTunnel 社區(qū)就是最好的杠桿。
無(wú)論你是 JDBC 調(diào)優(yōu)的“老法師”、Flink 內(nèi)核的“調(diào)參俠”、還是第一次提交 PR 的“萌新”,這里永遠(yuǎn)有一張空椅子等著你。就現(xiàn)在——Fork、Clone、Push,下一位 SeaTunnel Committer,可能就是你!
浙公網(wǎng)安備 33010602011771號(hào)