TiDB 數(shù)倉 | Flink + TiDB,體驗實時數(shù)倉之美
作者介紹
王天宜,TiDB 社區(qū)部門架構師。曾就職于 Fidelity Investment,Softbank Investment,擁有豐富的數(shù)據(jù)庫高可用方案設計經(jīng)驗,對 TiDB、Oracle、PostgreSQL、MySQL 等數(shù)據(jù)庫的高可用架構與數(shù)據(jù)庫生態(tài)有深入研究。
實時數(shù)倉的經(jīng)典架構 Flink 在 TiDB 上的實時讀寫場景 Flink + TiDB 的典型用戶案例
實時數(shù)倉經(jīng)典架構

1.1 Storm 架構

1.2 Lambda & Kappa 架構

Batch enging & Real-time enging 兩路架構,相互獨立。
邏輯完全不同,對齊困難。
技術棧與模塊多,結構復雜。

為什么不能改進流計算讓他處理所有全量數(shù)據(jù)?
流計算天然的分布式性注定其擴展性一定是很好的,能夠通過添加并發(fā)來處理海量數(shù)據(jù)?
那么如何使用流計算對全量數(shù)據(jù)進行重新計算呢:
1.3 Flink 架構

一般來說,前端不同的數(shù)據(jù)源將數(shù)據(jù)寫入 MQ 中,由 Flink 消費 MQ 中的數(shù)據(jù),做一些簡單的聚合操作,最后將結果寫入 OLAP 數(shù)據(jù)庫中。

怎樣才能統(tǒng)一規(guī)劃管理數(shù)據(jù)?使用數(shù)據(jù)倉庫。
如何才能實現(xiàn)實時處理?使用實時計算引擎。

那么什么才是一個好的數(shù)據(jù)模型呢?這里我們可以借鑒一下傳統(tǒng)的離線數(shù)倉的架構,將數(shù)據(jù)存儲層細分成 ODS,DWS 和 DWS。基于這樣的結構,可以統(tǒng)一規(guī)范,更穩(wěn)定,業(yè)務適配性也更強。

1.4 實時數(shù)倉架構未來展望

未來是一定會有第四個分水嶺的。我們可以隨意的暢想一下。
對于分布式 OLTP 數(shù)據(jù)庫,我們通過添加分析類的引擎,最終實現(xiàn)將 OLTP 與 OLAP 合二為一,在使用上作為一個統(tǒng)一,在存儲上分離,而做到 OLAP 與 OLAP 互不干擾。這種 HTAP 的架構允許我們在 OLTP 的庫里面直接分析,而又不影響在線的業(yè)務,那么他會不會取代大數(shù)據(jù)系統(tǒng)呢?
在我看來,用戶的業(yè)務數(shù)據(jù)只是交易系統(tǒng)的一部分。還有大量的用戶行為事件,日志、爬蟲數(shù)據(jù)等信息需要匯總到數(shù)倉中進行分析。如何做到技術棧的統(tǒng)一也是未來大數(shù)據(jù)行業(yè)需要面臨的巨大的挑戰(zhàn)。友商 hologress 已經(jīng)為我們做出了一個典范。把 Flink + Holo 這一套系統(tǒng)服務化,用戶不需要去學習和接受每個產(chǎn)品的問題和局限性,這樣能夠大大簡化業(yè)務的架構,提升開發(fā)效率。當然,我也看到的是越來越多的 HTAP 產(chǎn)品 HSAP 化,越來越多的 HSAP 產(chǎn)品 HTAP 化。邊界與定義越來越模糊,就好比說 TiDB 有了自己的 DBasS 服務 TiDB Cloud,Holo 也有行存和列存兩種引擎。在我看到的是,越來越多的用戶,將爬蟲業(yè)務,日志系統(tǒng)接入 TiDB 中,HTAP 和 HSAP 都將成為數(shù)據(jù)庫生態(tài)中不可或缺的重要組成部分。
Flink 在 TiDB 上的實時讀寫場景

2.1 Flink + TiDB 的生態(tài)架構全貌

最后一層是后端應用。可能是直接連接實時監(jiān)控系統(tǒng),實時報表系統(tǒng),也可能是將數(shù)據(jù)流入到 ES 這樣的搜索引擎中,進行下一步操作。

TiDB 兼容 MySQL 5.7 協(xié)議,我們常說,TiDB 是一個大號的 MySQL,其實我們希望用戶能夠像使用單節(jié)點的 MySQL 那樣使用 TiDB。不用考慮什么分布式,不用考慮分庫分表。這一切操作由 TiDB 來完成。那么 TiDB 是如何將執(zhí)行計劃下推的呢?這中間必然涉及到 metadata。我們的元數(shù)據(jù)存儲在 PD server 中。TiDB 到 PD 中獲取到數(shù)據(jù)分布的信息后再下推執(zhí)行計劃。所以我們也稱 PD 是 TiDB 集群的大腦。

2.2 實時寫入場景

其實我們一直在討論 Flink + TiDB 的鏈路解決方案。消息隊列這個詞反復地出現(xiàn)。Kafka,RabbitMQ,RocketMQ 這一類 MQ 工具,主要做的就是一發(fā),一存,一消費這三件事情。我們可以看到使用 flink-sql-connector-kafka 這個 jar 包,可以輕松地通過 Flink 消費 Kafka 的數(shù)據(jù)。

2.3 實時維表場景


2.4 CDC場景

2.5 混合場景


精力多的可以考慮自己手動修改源碼。
精力少的可以考慮通過不同組件的拼接以搭積木的方式完善功能。

Flink + TiDB 的典型用戶案例

3.1 360 的實時報表案例

3.2 小紅書的物化視圖案例

3.3 貝殼金服的實時維表案例

?? 更多 TiDB、TiKV、TiSpark、TiFlash 技術問題或生態(tài)應用可點擊「閱讀原文」,登錄 AskTUG.com ,與更多 TiDB User 隨時隨地交流使用心得~

