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

1.1 Storm 架構(gòu)

1.2 Lambda & Kappa 架構(gòu)

Batch enging & Real-time enging 兩路架構(gòu),相互獨(dú)立。
邏輯完全不同,對齊困難。
技術(shù)棧與模塊多,結(jié)構(gòu)復(fù)雜。

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

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

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

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

1.4 實(shí)時(shí)數(shù)倉架構(gòu)未來展望

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

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

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

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

2.2 實(shí)時(shí)寫入場景

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

2.3 實(shí)時(shí)維表場景


2.4 CDC場景

2.5 混合場景


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

Flink + TiDB 的典型用戶案例

3.1 360 的實(shí)時(shí)報(bào)表案例

3.2 小紅書的物化視圖案例

3.3 貝殼金服的實(shí)時(shí)維表案例

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

