溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TiDB與Flink相結合的實時數(shù)倉怎么理解

發(fā)布時間:2021-12-31 15:28:44 來源:億速云 閱讀:158 作者:iii 欄目:大數(shù)據(jù)

本篇內容介紹了“TiDB與Flink相結合的實時數(shù)倉怎么理解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

實時數(shù)倉的概念

數(shù)據(jù)倉庫的概念在 90 年代由 Bill Inmon 提出,是指一個面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的集合,用于支持管理決策。當時的數(shù)據(jù)倉庫通過消息隊列收集來自數(shù)據(jù)源的數(shù)據(jù),通過每天或每周進行一次計算以供報表使用,也稱為離線數(shù)倉。

TiDB與Flink相結合的實時數(shù)倉怎么理解

進入 21 世紀,隨著計算技術的發(fā)展、以及整體算力的提升,決策的主體逐漸從人工控制轉變?yōu)橛嬎銠C算法,出現(xiàn)了實時推薦、實時監(jiān)控分析等需求,對應的決策周期時間由天級逐步變?yōu)槊爰?,在這些場景下,實時數(shù)倉應運而生。

當前的實時數(shù)倉主要有三種架構:Lambda 架構、Kappa 架構以及實時 OLAP 變體架構:

  1. Lambda 架構是指在離線數(shù)倉的基礎上疊加了實時數(shù)倉部分,使用流式引擎處理實時性較高的數(shù)據(jù),最后將離線和在線的結果統(tǒng)一供應用使用。

TiDB與Flink相結合的實時數(shù)倉怎么理解

  1. Kappa 架構則移除了離線數(shù)倉部分,全部使用實時數(shù)據(jù)生產。這種架構統(tǒng)一了計算引擎,降低了開發(fā)成本。

TiDB與Flink相結合的實時數(shù)倉怎么理解

  1. 隨著實時 OLAP 技術的提升,一個新的實時架構被提出,暫時被稱為“實時 OLAP 變體”。簡單來說,就是將一部分計算壓力從流式計算引擎轉嫁到實時 OLAP 分析引擎上,以此進行更加靈活的實時數(shù)倉計算。

TiDB與Flink相結合的實時數(shù)倉怎么理解

總結一下,對于實時數(shù)倉,Lambda 架構需要維護流和批兩套引擎,開發(fā)成本相較其它兩者更高。相比于 Kappa 架構,實時 OLAP 變體架構可以執(zhí)行更加靈活的計算,但需要依賴額外的實時 OLAP 算力資源。接下來我們將介紹的 Flink + TiDB 實時數(shù)倉方案,就屬于實時 OLAP 變體架構。

關于實時數(shù)倉及這些架構更加詳細的對比說明,有興趣的讀者可以參考 Flink 中文社區(qū)的這篇文章。

Flink + TiDB 實時數(shù)倉

Flink 是一個低延遲、高吞吐、流批統(tǒng)一的大數(shù)據(jù)計算引擎,被普遍用于高實時性場景下的實時計算,具有支持 exactly-once 等重要特性。

在集成了 TiFlash 之后,TiDB 已經成為了真正的 HTAP(在線事務處理 OLTP + 在線分析處理 OLAP)數(shù)據(jù)庫。換句話說,在實時數(shù)倉架構中,TiDB 既可以作為數(shù)據(jù)源的業(yè)務數(shù)據(jù)庫,進行業(yè)務查詢的處理;又可以作為實時 OLAP 引擎,進行分析型場景的計算。

結合了 Flink 與 TiDB 兩者的特性,F(xiàn)link + TiDB 的方案的優(yōu)勢也體現(xiàn)了出來:首先是速度有保障,兩者都可以通過水平擴展節(jié)點來增加算力;其次,學習和配置成本相對較低,因為 TiDB 兼容 MySQL 5.7 協(xié)議,而最新版本的 Flink 也可以完全通過 Flink SQL 和強大的連接器(connector)來編寫提交任務,節(jié)省了用戶的學習成本。

對于 Flink + TiDB 實時數(shù)倉,下面是幾種常用的搭建原型,可以用來滿足不同的需求,也可以在實際使用中自行擴展。

以 MySQL 作為數(shù)據(jù)源

通過使用 Ververica 官方提供的 flink-connector-mysql-cdc,F(xiàn)link 可以既作為采集層采集 MySQL 的 binlog 生成動態(tài)表,也作為流計算層實現(xiàn)流式計算,如流式 Join、預聚合等。最后,F(xiàn)link 通過 JDBC 連接器將計算完成的數(shù)據(jù)寫入 TiDB 中。

TiDB與Flink相結合的實時數(shù)倉怎么理解

這個架構的優(yōu)點是非常簡潔方便,在 MySQL 和 TiDB 都準備好對應數(shù)據(jù)庫和表的情況下,可以通過只編寫 Flink SQL 來完成任務的注冊與提交。讀者可以在本文末尾的【在 docker-compose 中進行嘗試】一節(jié)中嘗試此架構。

以 Kafka 對接 Flink

如果數(shù)據(jù)已經從其它途徑存放到了 Kafka 中,可以方便地通過 Flink Kafka Connector 使 Flink 從 Kafka 中獲得數(shù)據(jù)。

在這里需要提一下的是,如果想要將 MySQL 或其它數(shù)據(jù)源的變更日志存放在 Kafka 中后續(xù)供 Flink 處理,那么推薦使用 Canal 或 Debezium 采集數(shù)據(jù)源變更日志,因為 Flink 1.11 原生支持解析這兩種工具格式的 changelog,無需再額外實現(xiàn)解析器。

TiDB與Flink相結合的實時數(shù)倉怎么理解

以 TiDB 作為數(shù)據(jù)源

TiCDC 是一款通過拉取 TiKV 變更日志實現(xiàn)的 TiDB 增量數(shù)據(jù)同步工具,可以利用其將 TiDB 的變更數(shù)據(jù)輸出到消息隊列中,再由 Flink 提取。

TiDB與Flink相結合的實時數(shù)倉怎么理解

在 4.0.7 版本,可以通過 TiCDC Open Protocol 來完成與 Flink 的對接。在之后的版本,TiCDC 將支持直接輸出為 canal-json 形式,以供 Flink 使用。

案例與實踐

上個部分介紹了一些基礎的架構,實踐中的探索往往更加復雜和有趣,這一部分將介紹一些具有代表性和啟發(fā)性的用戶案例。

小紅書

小紅書是年輕人的生活方式平臺,用戶可以通過短視頻、圖文等形式記錄生活點滴,分享生活方式,并基于興趣形成互動。截至到 2019 年 10 月,小紅書月活躍用戶數(shù)已經過億,并持續(xù)快速增長。

在小紅書的業(yè)務架構中,F(xiàn)link 的數(shù)據(jù)來源和數(shù)據(jù)匯總處都是 TiDB,以達到類似于“物化視圖”的效果:

  1. 左上角的線上業(yè)務表執(zhí)行正常的 OLTP 任務。

  2. 下方的 TiCDC 集群抽取 TiDB 的實時變更數(shù)據(jù),以 changelog 形式傳遞到 Kafka 中。

  3. Flink 讀取 Kafka 中的 changelog,進行計算,如拼好寬表或聚合表。

  4. Flink 將結果寫回到 TiDB 的寬表中,用于后續(xù)分析使用。

TiDB與Flink相結合的實時數(shù)倉怎么理解

整個過程形成了 TiDB 的閉環(huán),將后續(xù)分析任務的 Join 工作轉移到了 Flink 上,并通過流式計算來緩解壓力。目前這套方案已經支持起了小紅書的內容審核、筆記標簽推薦、增長審計等業(yè)務,經歷了大吞吐量的線上業(yè)務考驗且持續(xù)運行穩(wěn)定。

貝殼金服

貝殼金服持續(xù)多年深耕居住場景,積累了豐富的中國房產大數(shù)據(jù)。貝殼金服以金融科技為驅動,利用AI算法高效應用多維海量數(shù)據(jù)以提升產品體驗,為用戶提供豐富、定制化的金融服務。

在貝殼數(shù)據(jù)組的數(shù)據(jù)服務中,F(xiàn)link 實時計算用于典型的維表 Join:

  1. 首先,使用 Syncer (MySQL 到 TiDB 的一個輕量級同步工具)采集業(yè)務數(shù)據(jù)源上的維表數(shù)據(jù)同步到 TiDB 中。

  2. 然后,業(yè)務數(shù)據(jù)源上的流表數(shù)據(jù)則通過 Canal 采集 binlog 存入 kafka 消息隊列中。

  3. Flink 讀取 Kafka 中流表的變更日志,嘗試進行流式 Join,每當需要維表中的數(shù)據(jù)時,就去 TiDB 中查找。

  4. 最后,F(xiàn)link 將拼合而成的寬表寫入到 TiDB 中,用于數(shù)據(jù)分析服務。

TiDB與Flink相結合的實時數(shù)倉怎么理解

利用以上的結構,可以將數(shù)據(jù)服務中的主表進行實時 Join 落地,然后服務方只需要查詢單表。這套系統(tǒng)在貝殼金服已經深入各個核心業(yè)務系統(tǒng),跨系統(tǒng)的數(shù)據(jù)獲取統(tǒng)一走數(shù)據(jù)組的數(shù)據(jù)服務,省去了業(yè)務系統(tǒng)開發(fā) API 和內存聚合數(shù)據(jù)代碼的開發(fā)工作。

智慧芽

PatSnap(智慧芽)是一款全球專利檢索數(shù)據(jù)庫,整合了 1790 年至今的全球 116 個國家地區(qū) 1.3 億專利數(shù)據(jù)和 1.7 億化學結構數(shù)據(jù)??蓹z索、瀏覽、翻譯專利,生成 Insights 專利分析報告,用于專利價值分析、引用分析、法律搜索,查看 3D 專利地圖。

智慧芽使用 Flink + TiDB 替換了原有的 Segment + Redshift 架構。

原有的 Segment + Redshift 架構,僅構建出了 ODS 層,數(shù)據(jù)寫入的規(guī)則和 schema 不受控制。且需要針對 ODS 編寫復雜的 ETL 來按照業(yè)務需求進行各類指標的計算來完成上層需求。Redshift 中落庫數(shù)據(jù)量大,計算慢(T+1時效),并影響對外服務性能。

替換為基于 Kinesis + Flink + TiDB 構建的實時數(shù)倉架構后,不再需要構建 ODS 層。Flink 作為前置計算單元,直接從業(yè)務出發(fā)構建出 Flink Job ETL,完全控制了落庫規(guī)則并自定義 schema; 即僅把業(yè)務關注的指標進行清洗并寫入 TiDB 來進行后續(xù)的分析查詢,寫入數(shù)據(jù)量大大減少。按用戶/租戶、地區(qū)、業(yè)務動作等關注的指標,結合分鐘、小時、天等不同粒度的時間窗口等,在 TiDB 上構建出 DWD/DWS/ADS 層,直接服務業(yè)務上的統(tǒng)計、清單等需求,上層應用可直接使用構建好的數(shù)據(jù),且獲得了秒級的實時能力。

TiDB與Flink相結合的實時數(shù)倉怎么理解

用戶體驗:在使用了新架構后,入庫數(shù)據(jù)量、入庫規(guī)則和計算復雜度都大大下降,數(shù)據(jù)在 Flink Job 中已經按照業(yè)務需求處理完成并寫入 TiDB,不再需要基于 Redshift 的 全量 ODS 層進行 T+1 ETL。基于TiDB構建的實時數(shù)倉,通過合理的數(shù)據(jù)分層,架構上獲得了極大的精簡,開發(fā)維護也變得更加簡單;在數(shù)據(jù)查詢、更新、寫入性能上都獲得大幅度提升;在滿足不同的 adhoc 分析需求時,不再需要等待類似 Redshift 預編譯的過程;擴容方便簡單易于開發(fā)。 目前這套架構正在上線,在智慧芽內部用來進行用戶行為分析和追蹤,并匯總出公司運營大盤、用戶行為分析、租戶行為分析等功能。

網易互娛

網易 2001 年正式成立在線游戲事業(yè)部,經過近20年的發(fā)展,已躋身全球七大游戲公司之一。在 App Annie 發(fā)布的“2020 年度全球發(fā)行商 52 強”榜單中,網易位列第二。 TiDB與Flink相結合的實時數(shù)倉怎么理解

在網易互娛計費組的應用架構中,一方面使用 Flink 完成業(yè)務數(shù)據(jù)源到 TiDB 的實時寫入;另一方面,以 TiDB 作為分析數(shù)據(jù)源,在后續(xù)的 Flink 集群中進行實時流計算,生成分析報表。此外,網易互娛現(xiàn)在內部開發(fā)了flink作業(yè)管理平臺,用于管理作業(yè)的整個生命周期。

知乎

知乎是中文互聯(lián)網綜合性內容平臺,以“讓每個人高效獲得可信賴的解答”為品牌使命和北極星。截至 2019 年 1 月,知乎已擁有超過 2.2 億用戶,共產出 1.3 億個回答。

知乎作為 PingCAP 的合作伙伴,同時也是 Flink 的深度用戶,在自己的實踐過程中開發(fā)了一套 TiDB 與 Flink 交互工具并貢獻給了開源社區(qū):pingcap-incubator/TiBigData,主要包括了如下功能:

  1. TiDB 作為 Flink Source Connector,用于批式同步數(shù)據(jù)。

  2. TiDB 作為 Flink Sink Connector,基于 JDBC 實現(xiàn)。

  3. Flink TiDB Catalog,可以在 Flink SQL 中直接使用 TiDB 的表,無需再次創(chuàng)建。

在 docker-compose 中進行嘗試

為了方便讀者更好的理解,我們在 https://github.com/LittleFall/flink-tidb-rdw 中提供了一個基于 docker-compose 的 MySQL-Flink-TiDB 測試環(huán)境,供大家測試使用。

Flink TiDB 實時數(shù)倉 Slides 中提供了該場景下一個簡單的教程,包括概念解釋、代碼示例、簡單原理以及一些注意事項,其中示例包括:

  1. Flink SQL 簡單嘗試

  2. 利用 Flink 進行從 MySQL 到 TiDB 的數(shù)據(jù)導入

  3. 雙流 Join

  4. 維表 Join

在啟動 docker-compose 后,可以通過 Flink SQL Client 來編寫并提交 Flink 任務,并通過 localhost:8081 來觀察任務執(zhí)行情況。

“TiDB與Flink相結合的實時數(shù)倉怎么理解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI