當 TiDB 遇上 Flink:TiDB 高效入湖“新玩法” | TiLaker 團隊訪談

PingCAP發表於2022-02-15

資料湖是大資料領域近年來非常火熱的技術,傳統數倉無法實現增量資料的實時更新,也無法支援靈活的後設資料格式,資料湖技術便在這一背景下誕生了。資料庫的增量變更是資料湖中增量資料的主要來源,但目前 TiDB 的入湖路徑還比較割裂,全量變更用 Dumpling 元件,增量變更用 TiCDC 元件。兩者處於割裂的鏈路, TiDB 也無法通過實時物化檢視完成資料入湖的實時清洗和加工。

在 TiDB Hackathon 2021 賽事中,TiLaker 團隊的專案解決了 TiDB 資料入湖的問題。通過 TiLaker 可以幫助使用者簡化 TiDB 資料到資料湖的流程,充分消化使用 TiDB 上儲存的資料。TiLaker 團隊也憑藉這一專案一舉斬獲了“二等獎”、“華創資本特別贊助最佳市場潛力獎”、“最佳人氣獎”三項大獎。

“去年 Hackathon 其實有不少跟 Flink 整合的專案,今年決賽就看到一個,我還是有點小失望的。但今年 TiLaker 做的還是挺完備的,有 Flink committer 的參與,給 Flink 實現了一個 CDC Connector,這樣能讓 Flink 直接讀取 TiDB 的增量資料,同步到下游。藉助 Flink 的能力,讓 TiDB 更好地與下游生態進行打通,後面也希望有更多的應用案例能出來。”

——評委唐劉

在過去的一年中, TiDB 非常重視生態建設,在生態中最重要的就是 TiDB 作為一個分散式資料庫和大資料生態之間的融合互操作。TiLaker 通過 Flink CDC 建立了一個快速、高效、簡化的通道,解決了高效入湖的問題,將兩個生態進行了更好地融合。本篇文章就將通過對 TiLaker 團隊與華創資本合夥人謝佳的對話,揭祕 TiLaker 賽前幕後的精彩故事,也希望給開發者和使用者們如何將資料入湖帶來一些啟示。

TiLaker 團隊的由來:緣起社群
TiLaker 團隊成員由四位來自 TiDB 社群和 Flink 社群的資深貢獻者和開源軟體愛好者組成,下面先來認識下他們:

吳雪蓮:TiDB 同學可能對我比較熟,我一直在 TiDB 做核心,也是 TiDB Committer & TiKV Committer。有個愛好就是喜歡去撩 Flink 的同學,我愛人就在 Flink 團隊做資料湖,這次也因為這個淵源與 Flink 的小夥伴走到了一起。

徐榜江(雪盡):我之前在阿里網路團隊一直做實時監控系統,後來覺得實時計算是一個很好的方向,就跑來 Flink 社群,大概做了兩三年時間。前兩年專注在 Flink SQL 上,後面慢慢在資料整合方向發現了一些很大的空間。很多時候 Flink 被人們拿來當成一個資料管道,但資料管道是非常薄的一層,不像資料庫、資料湖有著資料的強依賴性。所以我們就有了 Flink CDC 這個專案,它相當於給 Flink 這個管道增加了一個整合能力,可以支援更多的資料來源、更多的上下游。我最近這大半年都在做 Flink CDC ,現在也是 Flink CDC Maintainer & Apache Flink Committer。

蔣曉峰(子懿):我叫蔣曉峰,阿里的花名叫子懿,和雪盡都來自 Flink 團隊。我是 Apache ShardingSphere & Apache RocketMQ Commttier,現在主要負責 Apache Flink AI 相關的工作。算上本次比賽一共參加了三屆 TiDB Hackathon 。

蔣泳波:我目前是在 TiDB 排程團隊做研發,和雪蓮是同一個組的同事。我其實是最近才加入 TiDB 的,之前在阿里網路部門做資料開發,和雪盡老師都在一個網路大團隊。不過我加入阿里的時候,雪盡好像已經離開了當時的團隊,我維護的一些 SQL 就是雪盡留下來的。

從個人介紹不難看出,TiLaker 的四位成員之間其實非常有淵源,TiLaker 的故事也緣起於此:

時間回到 Hackathon 開啟報名時——

有一天吳雪蓮回家,她愛人對她說:我有個同事想找你組隊。

蔣泳波:這個人就是我,當時我在參賽群裡看見了雪盡,雖然以前和他並沒有直接交流過,但還是去私聊了下,問要不要一起組隊玩?之後雪盡又聯絡了子懿,我又聯絡了雪蓮。

就這樣,TiLaker 團隊正式組成了。

兩個社群的交叉學科
比賽中,TiLaker 團隊給投資人評委華創資本合夥人謝佳留下了深刻的印象,他一直對這類 Infra 的專案非常感興趣。

謝佳:在這次整個參賽的選手和專案中,TiLaker 的專案是非常具有代表性的。兩個非常受開發者喜愛的頂級社群之間,相互放大彼此的生態,進行互聯互通。資料入湖來自於產業界非常廣泛、實際的需求,對於 Flink 的同學來說,可能這個事情他們或早或遲都會去做,本次 Hackathon 活動恰恰加速了 Flink 和 TiDB 社群的迭代。從團隊方面來說,大家都是開源社群中的各種好手,都能獨當一面。這幾方面合在一起,就是非常能吸引我的點。

雪盡:兩個社群的人做一個整合類的專案,相當於一個交叉學科,我們的團隊擁有 Flink 與 TiDB 兩個社群的同學,對於做這樣的整合類專案或生態類專案是很有幫助的。比如,有一些 TiDB 技術的細節,我可以很快地問一下雪蓮老師、泳波老師,他們可以快速地給我答案,我就不用去 GitHub 上去看程式碼和文件了。

我和子懿對 TP 型別的資料庫其實是沒有多少經驗的,我對 MySQL 、PG 、Oracle 有一定了解,但對 TiKV 底層的更新機制、叢集其實不是很瞭解,這些都是通過這次 Hackathon 瞭解的。所以剛開始我們對 TiDB 的一些邏輯不是很清楚,刷了兩次夜才解決。後來在雪蓮和泳波進來後,有一些程式碼看不懂的時候,我們就會在群裡直接交流,節省了很多時間和精力。

專案的靈感來源
吳雪蓮:專案的名字是才華橫溢的子懿老師起的,包括我們的戰隊宣言,還有答辯 PPT ,以及團隊介紹視訊都是他想的。專案的實現機制主要由雪盡老師提出,他平時就一直在做 Flink CDC 的工作,上游接了很多資料庫,有很多 TiDB 使用者就找過來問能不能支援一下 TiDB 。恰好這時,我們看到 TiDB Hackathon 2021 開啟報名,於是就決定帶著這個專案參賽了。

雪盡:Flink CDC 在資料來源方面, 其實主流的 DB 都支援了,即使沒有支援,社群的 PR 也都開出來了,只是我這邊沒有精力來得及給大家 review 。像 MySQL 、Oracle 、PG 、 MongoDB 、TiDB 的 PR 都在整理中,阿里的 PolarDB 和 OceanBase 的同學看到我們來 TiDB Hackathon 比賽也過來開了 PR,最近也在催著 review。

其實 Flink 這個管道有著很強的整合能力,它可以連線到很多下游。當資料到了一定規模時,資料庫的儲存始終要比廉價的資料湖儲存更貴。很多歷史資料並不需要那麼貴的儲存,也不需要去分析。讓它直接往資料湖裡匯入,做歷史儲存就夠了。而且資料湖也有更新的能力, Flink 結合資料湖甚至能夠做到分鐘級的更新。資料庫接 Flink 再接資料湖,就是看中了資料湖既便宜又可以更新這兩大核心優勢。

這次 Hackathon 上實現了哪些內容?

TiLaker 基於 TiCDC 元件開發了面向 TiDB 的 Flink CDC Connector, TiDB CDC Connector 提供全量讀取歷史資料和實時讀取增量資料的能力,在全量和增量資料切換時,保證一條不丟,一條不多的 eactly-once 語義;同時,TiLaker 提供了 SQL API,使用者只需要幾行 Flink SQL 就能捕獲 TiDB 中全量的歷史資料和增量資料。得益於 Flink SQL 的 c hangelog 機制,Flink SQL 可以和資料庫的變更資料無縫銜接,通過 Flink SQL 定義的 tidb-cdc 表就是 TiDB 中對應表的實時物化檢視,每次資料庫中的變更都會讓 tidb-cdc 表自動更新;

Flink CDC 專案還提供了 MySQL、MariaDB、Postgres、Oracle、Mongo 等資料庫的支援,這意味著在支援 TiDB 後,使用者可以實現異構資料來源的融合,比如部分表在 MySQL 中,部分表在 TiDB 中,可以做實時的 Join、Union 等 Streaming 加工;此外,作為一個優秀的計算引擎,Flink 可以提供強大的計算能力和優秀的 pipeline 能力,支援業界多種資料湖產品(Hudi,Iceberg),並且提供 SQL API 支援。這讓 TiDB 的使用者只需要使用 SQL 就可以方便地將資料實時寫入資料湖,輕鬆實現資料湖的構建。

正如評委唐劉評價所言,TiLaker 團隊在 Hackathon 中實現的專案已經非常完備,對於比賽他們已經完成了一大半,接下來擺在大家面前的難題,就是如何在比賽中讓評委對專案的亮點更有體感?

吳雪蓮:主程式碼和 Flink CDC 主要是雪盡老師和子懿老師在弄,我跟泳波是打醬油的,主要精力放在做 demo 上。當時一直在想怎麼才能突出這個專案的亮點呢?我們當時就想到了網約車實時智慧排程系統。 它基本上模擬了網約車是怎麼排程的。實時的資料寫 TP 的時候都會寫到 TiDB,但是像一些推薦的資料,比方說一個乘客要叫車,最簡單可能就是推薦一下他附近的車輛。在這個大資料的情況下, TiDB 可能就不太夠用。我們藉助 Flink CDC 將資料匯入到 Flink 來計算,實現實時推薦業務。另外在資料入湖後,還做了一個報表,就是那個車跑來跑去的報表,這些資料都是我們從湖裡面拿過來的,相當於一個離線的分析。

蔣泳波:當時想做這個 demo 主要就是覺得網約車是一個比較典型的網際網路架構,它會有一些訂單交易的核心繫統,這個系統需要資料,這一定是要跑在 TP 資料庫上面的。然後它也會有一些實時計算的要求,但是一般 TP 系統是很難去做流式計算的,同時對運營同學來說也會有一些實時大屏的需求,需要方便他們去做一些業務分析。

對 TiLaker 未來有何期待?
雪盡:從我的經驗來看,一個專案真的要上生產的話,還有蠻多事情要做的。特別是在測試方面要花很大的精力,以我最近對各個資料庫的瞭解,不同版本之間各種相容性的坑其實是特別多的,如果要為銀行這樣的客戶提供服務,還有蠻多的路要走。

蔣曉峰:在實時機器學習場景裡,我們這一套 TiLaker 方案對使用者來說是非常友好的。現在機器學習更加實時化了,它會帶來很多實時特徵的儲存。現在大部分公司的實時特徵儲存都用的是 KV, 比如 Redis ,它就要把每個時間點的特徵都存下來。但如果用了 TiDB + TiLaker 這一套解決方案,客戶就可以減少特徵儲存成本。我平時主要是負責實時風控和實時推薦解決方案的,也會對接很多客戶,如喜馬拉雅,他們都會有這方面需求,而且需求很大。這個專案如果可以落地,是可以作為一個商業化解決方案的。

評委謝佳從投資人的角度也給出了自己的看法:“坦白講,其實這類產品在商業化方面會有一些挑戰。這類產品會比較偏向於解決中間某個環節的問題,但凡做中間層都會面臨一個商業上的悖論和挑戰——你解決的確實是大家普遍遇到的問題,但還不是一個完整的商業問題。它會帶來一定程度上的效率提升,但是對於商業的價值提升不是很直接。如果你能從中間環節往整個業務角度看的話,它的價值鏈上下游就能夠延展得更多。客戶拿到這個產品,就是一個完整產品,他用這個完整產品可以解決更多的問題。從商業化的角度來說,就更容易創造更多的客戶價值。另外,很多企業都會有一些特定需求、非標化的場景,你很難用一個產品來滿足全部需求。但未來如果大家都上雲了,更加標準化了,就會掃除很多商業化的障礙。”

參加 TiDB Hackathon 的收穫與期待
吳雪蓮:我之前當過導師,也當過圍觀家屬,但今年確實是真正意義上第一次參加 TiDB Hackathon 。我其實一直挺想對 Flink 與 TiDB 生態接觸的東西瞭解一下,就趁這個機會去了。通過 TiLaker 這個專案,我對 Flink 以及 Flink 下游的一些生態更加了解了,這對我在 TiDB 的工作有很大幫助。另外,通過參加 Hackathon ,我在杭州現場和很多搞開源的同學都交流了一下,還是挺開心的。

雪盡:我也是第一次參加 TiDB Hackathon。雖然 Flink 社群之前也有舉辦過,但其實跟 TiDB 早期舉辦的 Hackathon 應該差不多,就是兩天的極限程式設計。這次組委會給我們留了比較充沛的時間,也是我們最終能把這個專案的完成度做得比較好的一個原因。

本屆 Hackathon 真的就是高手如雲,我覺得很多參賽選手的 idea 和實際效果都非常厲害。我們本來都沒期待能夠拿二等獎,感覺最多就是三等獎。我記得有一個做效能增強的團隊,他們的 Benchmark 測出來最低提升 18%,最高 40%,那種專案的確很有技術含量。另外,在杭州這邊還有一個最佳創意獎,和遊戲做結合的,給我的印象也很深刻。參加 TiDB Hackathon,能夠認識社群的各個同學,我覺得這個收穫更大。

蔣曉峰:我已經想好了下一界 Hackathon 比賽的 idea。Flink Forward Asia 2021 提出了 Streamhouse 概念,其中引入了 Dynamic Table Storage 。我想用 TiFlash 作為 Dynamic Table Storage 底層的實現,這樣可以更加強 Flink 生態和 TiDB 生態之間的整合。這不僅僅是在資料整合方面做對接合作,也可以在其他模組上面做一些創新。 關於 Hackathon 我期待之後的 Hackathon 能線上 PK 寫程式碼 。這次可以看到很多參賽專案的工作量不僅僅只有兩天能做完,其實從 Hackathon 比賽的意義來說就不那麼符合要求。

謝佳:我是第二次參加 TiDB Hackathon 了。第一次參加的時候大家總會說 PingCAP 是一家 Hackathon 驅動的公司,我當時沒有特別強烈的感受,但這次我覺得這種感受還蠻強的。在國內做基礎軟體的企業中,PingCAP 應該是第一家擁抱開源,同時把商業化也做得不錯的。很多人平時可能偶然會產生一些 idea ,但因為工作例行安排平時做不了,通過 Hackathon 就能把這些 idea 釋放出來,變成另外一種 driven。

相關文章