高海峰,葉春明
(上海理工大學(xué)管理學(xué)院,上海 200090)
當(dāng)今社會(huì),數(shù)字化、信息化和智能化已成為時(shí)代特征,數(shù)字經(jīng)濟(jì)已成為經(jīng)濟(jì)發(fā)展的必然支持。隨著5G時(shí)代的來(lái)臨,數(shù)字經(jīng)濟(jì)成為新的發(fā)展動(dòng)力,數(shù)字化轉(zhuǎn)型成為企業(yè)發(fā)展戰(zhàn)略的一個(gè)重要選擇。
IBM Marketing cloud的一份最新報(bào)告中指出“僅過(guò)去兩年就建立了今天90%的資料,每天建立2.5 億億字節(jié),隨著新設(shè)備、傳感器和新技術(shù)的出現(xiàn),數(shù)據(jù)增長(zhǎng)率也會(huì)隨之加速。”
目前,我國(guó)已發(fā)展出一系列成熟的大數(shù)據(jù)基礎(chǔ)設(shè)施,批計(jì)算方面有基于Spark 計(jì)算的分布式集群,流計(jì)算方面有基于Storm 的分布式集群。大數(shù)據(jù)的存儲(chǔ)方面有基于融合型數(shù)據(jù)庫(kù)的TiDB,有基于MPP 架構(gòu)的數(shù)據(jù)庫(kù)ClickHouse[1],有基于Hadoop 的Hive 等等[2]。但是,由于技術(shù)迭代更新,各類(lèi)運(yùn)算與儲(chǔ)存設(shè)備層出不窮,我們?cè)谧黾耗J降倪x型時(shí),須遵循三方面的基本原則:集群的穩(wěn)定性、數(shù)據(jù)處理的高效性和投資的合理性。應(yīng)結(jié)合實(shí)際情況,采用相對(duì)成熟的更先進(jìn)的技術(shù),提高整體應(yīng)用性能,并減少資源的浪費(fèi),提升整體的應(yīng)用建設(shè)效能。
基于上述考慮,本文提出一種新型實(shí)時(shí)數(shù)倉(cāng)設(shè)計(jì)方案,結(jié)合使用了基于StarRocks的存儲(chǔ)技術(shù)以及基于Flink的實(shí)時(shí)計(jì)算技術(shù)[3],應(yīng)用于數(shù)據(jù)中臺(tái)[4]相關(guān)領(lǐng)域的業(yè)務(wù)中,在性能以及吞吐量等方面都有明顯的提升。一方面,有效減少了整個(gè)集群中服務(wù)器節(jié)點(diǎn)的數(shù)量,進(jìn)而節(jié)約了硬件資源的投入;另一方面,大幅提高了整體的計(jì)算性能。
Apache Flink 是一個(gè)較成熟的流計(jì)算技術(shù),主要用于在無(wú)邊界和有邊界數(shù)據(jù)流上進(jìn)行有狀態(tài)的計(jì)算。Flink 的兼容性以及擴(kuò)展性都非常優(yōu)秀,常見(jiàn)的集群環(huán)境中都可以運(yùn)行Flink,計(jì)算的速度媲美內(nèi)存計(jì)算的速度,計(jì)算的數(shù)據(jù)規(guī)模可以達(dá)到任意規(guī)模。
Apache Flink 功能非常強(qiáng)大,可以開(kāi)發(fā)多種不同種類(lèi)的應(yīng)用[5]。它的主要特征包含:流批一體化、事件支持、精細(xì)的狀態(tài)管理以及精確一次的狀態(tài)一致性保障等。Flink不僅可以運(yùn)行在多種資源管理框架上,包括YARN、Mesos、Kubernetes 等,也可以運(yùn)行在裸機(jī)集群上。在高可用模式下,不存在單點(diǎn)故障的問(wèn)題。事實(shí)證明,F(xiàn)link 可以擴(kuò)展到數(shù)千核心,其狀態(tài)可以達(dá)到TB 級(jí)別,且仍能保持高吞吐、低延遲的特點(diǎn)。全球各地,有非常多要求苛刻的流處理應(yīng)用都運(yùn)行在Flink上面。
Flink 是近兩年大數(shù)據(jù)計(jì)算領(lǐng)域的一顆新星。但是,在我國(guó)很多的大型互聯(lián)網(wǎng)企業(yè)中均有實(shí)際應(yīng)用,如阿里、美團(tuán)、京東等。本文對(duì)三種主流的開(kāi)源流處理框架做對(duì)比[6],具體如表1所示。
表1 3種主流的開(kāi)源流處理框架的技術(shù)對(duì)比
基于以上的綜合比較分析,F(xiàn)link 是一個(gè)設(shè)計(jì)優(yōu)良的框架,低延遲、高性能、高吞吐是三個(gè)典型的特征,非常符合項(xiàng)目的選型特征,所以本文采用Flink 技術(shù)作為流計(jì)算支撐。
StarRocks 是一款高性能分析型數(shù)據(jù)倉(cāng)庫(kù),使用向量化、MPP 架構(gòu)、可實(shí)時(shí)更新的列式存儲(chǔ)引擎等技術(shù)實(shí)現(xiàn)多維、實(shí)時(shí)、高并發(fā)的數(shù)據(jù)分析。StarRocks 既支持從各類(lèi)實(shí)時(shí)和離線的數(shù)據(jù)源高效導(dǎo)入數(shù)據(jù),也支持直接分析數(shù)據(jù)湖上各種格式的數(shù)據(jù)。同時(shí)StarRocks具備水平擴(kuò)展,高可用,高可靠,易運(yùn)維等特性。廣泛應(yīng)用于實(shí)時(shí)數(shù)倉(cāng)、OLAP 報(bào)表、數(shù)據(jù)湖分析等場(chǎng)景。
StarRocks 也是近兩年在大數(shù)據(jù)分析領(lǐng)域發(fā)展起來(lái)的一顆新星,但在國(guó)內(nèi)許多大型互聯(lián)網(wǎng)企業(yè)的數(shù)倉(cāng)建設(shè)中均有應(yīng)用,本文對(duì)近幾年主流開(kāi)源數(shù)倉(cāng)技術(shù)作對(duì)比,具體如表2所示。
表2 ClickHouse和StarRocks的對(duì)比
綜合比較之下,StarRocks 是一個(gè)非常不錯(cuò)的選擇,不僅性能出色,而且功能也非常強(qiáng)大,解決了很多傳統(tǒng)數(shù)倉(cāng)架構(gòu)的問(wèn)題,所以這是本文采用StarRocks作為數(shù)倉(cāng)的根本原因。
本項(xiàng)目的整體設(shè)計(jì)結(jié)合了分層架構(gòu)[7]和功能模塊化[8]思路。模塊間采用標(biāo)準(zhǔn)接口的方式,便于升級(jí)替換,整體架構(gòu)分為三層,具體如圖1所示。
圖1 系統(tǒng)整體架構(gòu)圖
⑴數(shù)據(jù)采集層:支持多源異構(gòu)數(shù)據(jù)的采集。包括:各類(lèi)關(guān)系型數(shù)據(jù)庫(kù)、非關(guān)系型數(shù)據(jù)庫(kù)、日志平臺(tái)、統(tǒng)一數(shù)據(jù)采集工具等。
⑵數(shù)據(jù)處理層:與數(shù)據(jù)采集的源數(shù)據(jù)端進(jìn)行對(duì)接,從而實(shí)現(xiàn)數(shù)據(jù)的多樣化處理。包括流計(jì)算、批計(jì)算等,并對(duì)外提供統(tǒng)一的數(shù)據(jù)查詢(xún)服務(wù)。
⑶數(shù)據(jù)應(yīng)用層:基于數(shù)據(jù)處理層提供的統(tǒng)一數(shù)據(jù)查詢(xún)服務(wù),提供多場(chǎng)景應(yīng)用的支持。包括數(shù)據(jù)可視化分析、實(shí)時(shí)場(chǎng)景等。
在圖1 所示的系統(tǒng)整體架構(gòu)圖基礎(chǔ)上,對(duì)實(shí)時(shí)鏈路以及數(shù)據(jù)倉(cāng)庫(kù)等細(xì)節(jié)進(jìn)行細(xì)化,遵循分層架構(gòu)的原則,將數(shù)據(jù)處理層進(jìn)一步拆分為兩層:數(shù)據(jù)處理層和數(shù)據(jù)存儲(chǔ)層,旨在突出Flink 的核心角色以及StarRocks 在數(shù)據(jù)存儲(chǔ)中的核心角色。實(shí)時(shí)數(shù)倉(cāng)的架構(gòu)設(shè)計(jì),具體如圖2所示。
圖2 實(shí)時(shí)數(shù)倉(cāng)架構(gòu)圖
圖3 所示為考勤業(yè)務(wù)場(chǎng)景數(shù)據(jù)處理的流程,技術(shù)選型[9]為Kafka+Flink+Redis+StarRocks。
圖3 考勤業(yè)務(wù)場(chǎng)景數(shù)據(jù)處理流程圖
Kafka 用于實(shí)時(shí)傳遞需要計(jì)算的數(shù)據(jù),F(xiàn)link 用于實(shí)時(shí)計(jì)算并將計(jì)算結(jié)果存儲(chǔ)于Redis 中,StarRocks 承擔(dān)數(shù)據(jù)倉(cāng)庫(kù)的職責(zé),包括ODS、DWD、DWS、ADS 層,并對(duì)外提供統(tǒng)一數(shù)據(jù)查詢(xún)服務(wù)。
考勤數(shù)據(jù)實(shí)時(shí)寫(xiě)入Kafka 集群,基于業(yè)務(wù)屬性和數(shù)據(jù)規(guī)模的考慮,對(duì)KafkaTopic 做了細(xì)化設(shè)計(jì),具體如表3所示。
表3 KafkaTopic設(shè)計(jì)
Flink計(jì)算的時(shí)間維度如表4所示。
表4 Flink計(jì)算的時(shí)間維度
考勤場(chǎng)景的數(shù)據(jù)范圍及計(jì)算要求如表5所示。
表5 考勤場(chǎng)景的數(shù)據(jù)范圍及計(jì)算要求
本文采用的存儲(chǔ)技術(shù)是StarRocks 集群,具體如圖4所示。
圖4 StarRocks的數(shù)據(jù)存儲(chǔ)
StarRocks 支持使用物化視圖來(lái)進(jìn)行查詢(xún)加速。不同于一些同類(lèi)產(chǎn)品的物化視圖需要異步和原表做數(shù)據(jù)同步,StarRocks 的物化視圖可以自動(dòng)根據(jù)原表更新數(shù)據(jù)。只要原表數(shù)據(jù)發(fā)生變更,物化視圖的更新也同步完成,不需要額外的操作。
根據(jù)本文的設(shè)計(jì)方案,集群部署了50 臺(tái)物理機(jī),可以達(dá)到以下的性能要求:處理數(shù)據(jù)量50T/天,處理數(shù)據(jù)條數(shù)200億條/天。
經(jīng)過(guò)多輪綜合驗(yàn)證,具體的時(shí)延效果如表6所示。大幅節(jié)省了物理機(jī)的部署,降低了CPU 使用率,具體性能效果如表7所示。
表6 時(shí)延效果表
表7 性能效果表
基于StarRocks 的13 種查詢(xún)場(chǎng)景的性能效果,如表8所示。
表8 StarRocks性能效果表
120億數(shù)據(jù)規(guī)模下的性能效果,如圖5所示。
圖5 StarRocks與ClickHouse性能對(duì)比
從圖5 數(shù)據(jù)可見(jiàn),StarRocks 的查詢(xún)性能明顯優(yōu)于ClickHouse,這得益于StarRocks 針對(duì)HLL 查詢(xún)的性能優(yōu)化。
本文面向解決傳統(tǒng)數(shù)倉(cāng)架構(gòu)的效率和吞吐量等問(wèn)題,設(shè)計(jì)了高效的實(shí)時(shí)數(shù)倉(cāng)架構(gòu),結(jié)合使用了Flink流計(jì)算技術(shù)及StarRocks 存儲(chǔ)技術(shù)。并結(jié)合企業(yè)內(nèi)的考勤業(yè)務(wù)場(chǎng)景,實(shí)現(xiàn)了基于Kafka+Flink+Redis+StarRocks技術(shù)組合的系統(tǒng)升級(jí)上線。在減少一倍硬件資源投入的情況下,時(shí)延降低至原先的一半,數(shù)據(jù)處理吞吐性能提升至四倍以上,滿(mǎn)足了企業(yè)對(duì)于高并發(fā)、實(shí)時(shí)計(jì)算、低延遲和大數(shù)據(jù)存儲(chǔ)的需求,達(dá)到了降本增效的目的。