TiKV + Flink = 最佳人氣流批一體庫|TiDB Hackathon 2020 優秀項目分享

近日,由 TiDB 社區主辦,專屬於全球開發者與技術愛好者的頂級挑戰賽事——TiDB Hackathon 2020 比賽圓滿落幕。今年是 TiDB Hackathon 第四次舉辦,參賽隊伍規模創歷屆之最,共有 45 支來自全球各地的隊伍報名,首次實現全球聯動。經過 2 天時間的極限挑戰, 大賽湧現出不少令人激動的項目。爲了讓更多小夥伴瞭解這些參賽團隊背後的故事, 我們開啓了 TiDB Hackathon 2020 優秀項目分享系列,本篇文章將介紹 TiFlink 團隊賽前幕後的精彩故事。

Flink 是一個低延遲、高吞吐、流批統一的大數據計算引擎,作爲大數據處理領域最近冉冉升起的一顆新星,其針對數據流的分佈式計算提供了數據分佈、數據通信以及容錯機制等功能,被普遍用於高實時性場景下的實時計算。2020 年 TiDB 與 Flink 正式開始合作,探索將 Flink 與 TiDB 結合的解決方案。令人開心的是,在今年 TiDB Hackathon 上我們就看到出現了 3 個基於 Flink 的項目。其中,TiFlink 隊伍的項目爲 Flink 實現了更好的 TiKV Source、Sink 和 TiDB Catalog Reader,支持 Snapshot 讀取和 Change Log 增量讀取和 2 Phase Commit 寫入,以實現在 TiDB 裏快速創建 Materialized View 和在 Flink 裏方便編寫讀寫 TiKV 數據的批/流處理任務。 該項目憑藉超高的人氣一舉奪得本屆大賽最佳人氣獎。我們在賽後採訪了 TiFlink 團隊部分隊員與評委李鈺老師,邀請他們分享自己的 Hackathon 經驗。

項目背景:當 TiKV 遇上 Flink

提起 TiFlink 項目的靈感,還得從隊長張茄子去年在公司內部的嘗試說起。他的公司有一些數據實時分析的需求,但原有的數據分析工具在單表查詢時很快,一旦到 join 時就不是很好搞。當時這個項目最終沒能在內部成功做出來,但想法一直都在,直到今年 Hackathon 期間,張茄子和隊友們一起重新探討了可能的方案。目前,TiDB/TiKV 提供的 Flink 集成和 Java 客戶端具有如下缺陷:

  • Java 客戶端不支持抓取 CDC 日誌,使用 TiCDC 需要通過 Kafka 轉發,比較笨重和繁瑣,延遲較高;

  • Flink 集成的 Source 只支持批量讀入,不支持批流結合(即先批量讀入,後拉取 CDC 日誌進行增量更新);

  • Flink 集成的 Sink 尚不支持 TwoPhaseCommit 協議,正在開發中的版本只支持各個節點單獨 TwoPhaseCommit ,不支持全局同步 TwoPhaseCommit 。

張茄子觀察到 Flink 有着很完善的系統,在 Flink 裏有一個 Flink CDC connector,但是隻有 MySQL 的,沒有 TiDB 的。所以隊員們就想借助這次比賽做出一個 TiDB 的 CDC connector,將其貢獻到 Flink 和 TiDB 社區,這樣就可以打通 TiDB 社區和 Flink 社區的合作,藉助 TiKV + Flink 打造出一個 TiDB 的批流一體庫。這就是 TiFlink 的由來,通過它可以實現更好的 Flink 集成(Connector)以及提供物化視圖(Materialized View)功能,顯著提高 TiDB/TiKV 生態環境的 OLAP 能力。

項目設計:TiFlink 流批一體庫誕生了

在比賽中,爲了將設想中的 TiFlink 流批一體庫實現落地,隊員們做出了一系列嘗試:

  • 爲 TiKV 的 Java 客戶端添加直接拉取 CDC 日誌的功能,從而爲實現批流一體數據處理的 Flink Source 創造條件;

  • 爲 Flink 開發 TiKV 兼容批讀取和增量讀取的 DynamicTableSource ,實現不同隔離級別的讀取功能;

  • 爲 Flink 開發兼容 TiKV 事務模型並支持 TwoPhaseCommit 接口的 DynamicTableSink ,實現跨節點(切片,Region)一致的數據寫入;

  • 在上述組件的基礎上,嘗試實現 TiDB 上基於 Flink 的物化視圖功能。

經過緊張的開發,在比賽答辯中 TiFlink 終於初見雛形,並順利通過 DEMO 演示,TiFlink 團隊爲 TiKV 寫了一個 DynamicTableSource,讓 Flink 直接讀取 TiKV snapshot 數據以及 CDC 流式變更數據,同時支持了 DynamicTableSink,能讓 Flink 通過 TiKV 事務的方式將數據重新寫回到 TiKV 裏面。通過這種方式,讓大數據處理在 TiDB 以及 Flink 之間高效的流轉。同時,TiFlink 也構建了一個 global snapshot coordinator,可以讓分佈式執行的 Flink 任務在以 snapshot isolation 的強一致方式來維護物化視圖。

因爲 Hackathon 走到一起的 TiFlink

令人驚訝的是,在比賽的短短几天時間裏就能做出如此完備功能的 TiFlink,其 4 名隊員可以說來自天南海北。隊長張茄子來自全球領先的招聘網站 Indeed ,在日本做新項目孵化;乘蝸牛追烏龜本名徐哲,在大唐電信從事流媒體服務端研發,是多屆天池大賽數據庫比賽骨灰級獲獎選手;jiangplus 在一家 AI 和算法驅動的藥物研發公司 Xtalpi,從事內部雲原生機器學習平臺的構建工作;SteNicholas (蔣曉峯(子懿))則在阿里雲 Apache Flink 做生態相關工作。若在平時,看似分屬於不同行業不同地區的四人可能永遠都不會產生任何聯繫,但出於同樣對 Hackathon 的熱愛,將他們串聯到了一起。

Hackathon 對張茄子來說,最大的吸引是可以將自己的 idea 講出來,同時能夠認識到擁有各種各樣 idea 的朋友,大家一起分享自己的想法是一件非常開心的事情。

SteNicholas 認爲 Hackathon 帶來的最大收穫莫過於可以用自己熟悉的 Flink 或 TiDB 做任何想做的事情,只要能把它實現,就是一件特別 cool 的事情。

而對於隊伍中年紀最小的徐哲而言, Hackathon 是一次開拓自己視野的好機會,不但可以看到其他隊伍提出了一些自己從未想過的 idea ,還能逼着自己在很短的時間內完成一個非常有意思的點子,完成對自我的挑戰。

與以前參加過的 Hackathon 不同,TiDB Hackathon 以「∞」作爲本次大賽主題,參賽隊伍只要有創新的 idea ,都可以拿出來參賽,在兩天的編程裏瘋狂 coding,將自己的 idea 落地分享。對四人來說,這樣的機會怎能錯過?

在進行了一番探討和交流後,張茄子和隊友們決定將 TiKV + Flink 打造流批一體庫作爲自己的參賽項目。

今年由於疫情原因,大家都通過線上方式進行遠程協作, 2 人負責 Flink 開發工作,2 人負責 TiDB 開發工作,每隔幾個小時便會溝通項目進度。隊長張茄子認爲對遠程協作來說保持一定頻次的溝通至關重要,需要確保每個人的工作內容都朝着同一個方向,不至於最後走歪。

SteNicholas 作爲 TiFlink 唯一到現場參賽的隊員,還通過線上向其他隊員做起了現場直播,引得大家直呼羨慕。對 Hackathon 來說不能一起面對面奮鬥,始終是一件非常遺憾的事情,大家都表示如果明年繼續參賽,希望還能夠在現場相聚。

評委李鈺老師是來自 Apache Flink & Apache HBase 的 PMC,出於職業敏感,對 Flink 這類生態結合的項目特別關注:“ 今年與 Flink 相結合的項目一共有三個,有通過 Flink 給 TiDB 做聯邦查詢的、有用 Flink 做物化視圖的,但我覺得與 Flink 集成最深的還是 TiFlink 。比如他們做了一個原生的 Java 的 CDC,利用 Flink 本身機制實現物化視圖的 Snapshot 的全局性。我個人覺得這些方面再往後走都具備落地的價值,這也是我最喜歡這個項目的原因。”

在李鈺看來,如果能將 TiDB 聯邦查詢的項目與 TiFlink 項目結合在一起,對用戶而言會產生更好的效果。現在有很多業務場景既有實時計算大數據相關的需求,又有數據庫查詢的需求,在這種情況下,將 TiDB+Flink 聯合起來形成解決方案非常具有實用價值。例如, Flink 其實可以直接給 TiDB 提供訪問 Hive 的能力。如果你既想查一個數據庫裏的數據,又想查一個 Hive 裏的數據,就可以通過 TiDB 的這種標準 SQL 查詢實現,屏蔽掉底層複雜的細節,這對於客戶而言是非常具有現實價值的方案。

未來期待:找到初期用戶

2 天的比賽時間非常有限,隊員們希望在未來幾個月找到一些初期用戶,在用戶反饋中不斷完善 TiFlink 項目。隊員們對此都很期待:“畢竟我們自己的想法和用戶的想法還是有很多不一樣的地方,比如說在一些選型、設計上的問題,我們自己沒有辦法解答,需要知道對用戶來說哪種方式比較方便使用。理想情況下,我們當然希望這個項目可以變成 TiDB 的一部分 ,作爲一個整體被 TiDB 的用戶非常方便地使用起來。

李鈺老師特別補充道:“其實 Flink 也一直在提批流一體數倉,在用戶有實時需求的情況下,批流一體數倉能夠極大地節省整體 TCO 。類似的方案之前在阿里內部也有過一些技術實現,但 TiKV+Flink 是首次以開源解決方案的形式予以實現,這可以爲廣大用戶提供更普惠的解決方案。”

除了 TiFlink ,本屆大賽中也湧現出不少令人激動的項目,除了自己的隊伍,還有哪些是最感興趣的呢?幾位隊員明顯有着自己的偏愛:

張茄子:“我比較喜歡的是幾個大佬們做的那個 Index 的項目,非常具有想象力,把一些比較新的想法都融合進來了,我感覺這也是最有前景的項目之一。”

徐哲:“我最感興趣的是 UDF 和 TiGraph 兩個隊伍的項目。UDF 在演示期間的展示非常酷, TiGraph 在展示期間有一個和原生的 TiDB 的性能對比,效果也非常好。他們的項目都是非常實用的想法,最後都獲得了獎項,說明大家對他們也非常認可。”

Hackathon 建議:參賽,享受比賽

作爲經常參加 Hackathon 的老手,隊員們也給對 Hackathon 活動感興趣的萌新們分享了一些個人經驗:張茄子建議新人一定要大膽來參賽。很多參賽選手其實也有好的點子和想法,但是他不太敢來參賽,害怕在衆人面前露怯。其實大可不必,即使最終答辯效果不好,被淘汰也沒什麼不好意思的。不要太執着於比賽成績,享受比賽過程就好了。你可以在這個過程中學習到很多東西,這纔是最重要的收穫。此外,如果想取得好成績的話,需要提前對 TiDB 和 TiKV 進行了解和學習,獲獎隊伍中有很多人都是社區中的長期貢獻者,事先做一些準備會更有勝算。李鈺老師認爲 Hackathon 活動是一個鍛鍊人的好機會,對於技術人員而言非常具有價值。就像馬拉松長跑一樣,在平時紛繁複雜的工作之外給自己一個機會來發泄一下。**馬拉松是一種對自我體力極限的鍛鍊, Hackathon 則是一個腦力上的鍛鍊。**最簡單的建議就是要先來參加,在參賽的過程中享受比賽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章