来电科技:基于 Flink + Hologres 的实时数仓演进之路
簡介:?本文將會講述共享充電寶開創(chuàng)企業(yè)來電科技如何基于 Flink + Hologres 構(gòu)建統(tǒng)一數(shù)據(jù)服務(wù)加速的實(shí)時(shí)數(shù)倉
作者:陳健新,來電科技數(shù)據(jù)倉庫開發(fā)工程師,目前專注于負(fù)責(zé)來電科技大數(shù)據(jù)平臺離線和實(shí)時(shí)架構(gòu)的整合。
深圳來電科技有限公司(以下簡稱 “來電科技”)是共享充電寶行業(yè)開創(chuàng)企業(yè),主要業(yè)務(wù)覆蓋充電寶自助租賃、定制商場導(dǎo)航機(jī)開發(fā)、廣告展示設(shè)備及廣告?zhèn)鞑サ确?wù)。來電科技擁有業(yè)內(nèi)立體化產(chǎn)品線,大中小機(jī)柜以及桌面型,目前全國超過 90% 的城市實(shí)現(xiàn)業(yè)務(wù)服務(wù)落地,注冊用戶超 2 億人,實(shí)現(xiàn)全場景用戶需求。
一、大數(shù)據(jù)平臺介紹
1. 發(fā)展歷程
來電科技大數(shù)據(jù)平臺的發(fā)展歷程主要分為以下三個(gè)階段:
1)離散 0.X Greenplum
為什么說離散?因?yàn)橹皼]有一個(gè)統(tǒng)一的大數(shù)據(jù)平臺來支持?jǐn)?shù)據(jù)服務(wù),而是由每個(gè)業(yè)務(wù)開發(fā)線自行取數(shù)或者做一些計(jì)算,并用一個(gè)低配版的 Greenplum 離線服務(wù)來維持日常的數(shù)據(jù)需求。
2)離線 1.0 EMR
之后架構(gòu)升級為離線 1.0 EMR,這里的 EMR 指的是阿里云由大數(shù)據(jù)組成的彈性分布式混合集群服務(wù),包括 Hadoop、HiveSpark 離線計(jì)算等常見組件。
阿里云 EMR 主要解決我們?nèi)齻€(gè)痛點(diǎn):
- 一是存儲計(jì)算資源的水平可擴(kuò)展;
- 二是解決了前面各個(gè)業(yè)務(wù)線異構(gòu)數(shù)據(jù)帶來的開發(fā)維護(hù)問題,由平臺統(tǒng)一清洗入倉;
- 三是我們可以建立自己的數(shù)倉分層體系,劃分一個(gè)主題域,為我們的指標(biāo)系統(tǒng)打好基礎(chǔ)。
3)實(shí)時(shí)、統(tǒng)一 2.0 Flink + Hologres
當(dāng)前正經(jīng)歷的 “Flink + Hologres” 實(shí)時(shí)數(shù)倉,這也是本文分享的核心。它為我們大數(shù)據(jù)平臺帶來了兩個(gè)質(zhì)的改變,一是實(shí)時(shí)計(jì)算,二是統(tǒng)一數(shù)據(jù)服務(wù)。基于這兩點(diǎn),我們加速知識數(shù)據(jù)探索,促進(jìn)業(yè)務(wù)快速發(fā)展。
2. 平臺能力
總的概括來說,2.0 版本的大數(shù)據(jù)平臺提供了以下能力:
- 數(shù)據(jù)集成
平臺現(xiàn)在支持使用實(shí)時(shí)或者離線的方式集成業(yè)務(wù)數(shù)據(jù)庫或業(yè)務(wù)數(shù)據(jù)的日志。
- 數(shù)據(jù)開發(fā)
平臺現(xiàn)已支持基于 Spark 的離線計(jì)算以及基于 Flink 的實(shí)時(shí)計(jì)算。
-
數(shù)據(jù)服務(wù)
數(shù)據(jù)服務(wù)主要由兩部分組成:
- 一部分是由 Impala 提供的分析服務(wù)和即席分析的能力;
- 另一部分是 Hologres 提供的針對業(yè)務(wù)數(shù)據(jù)的交互式分析能力。
- 數(shù)據(jù)應(yīng)用
同時(shí)平臺可以直接對接常見的 BI 工具,業(yè)務(wù)系統(tǒng)也能快速地集成對接。
3. 取得成就
大數(shù)據(jù)平臺提供的能力給我們帶來了不少成就,總結(jié)為以下五點(diǎn):
- 橫向擴(kuò)展
大數(shù)據(jù)平臺的核心就是分布式架構(gòu),這樣我們能夠低成本地水平擴(kuò)展存儲或者計(jì)算資源。
- 資源共享
可以整合所有服務(wù)器可用的資源。以前的架構(gòu)是每個(gè)業(yè)務(wù)部門自己維護(hù)一套集群,這樣會造成一些浪費(fèi),難以保證可靠性,而且運(yùn)費(fèi)成本較高,現(xiàn)在由平臺統(tǒng)一調(diào)度。
- 數(shù)據(jù)共享
整合了業(yè)務(wù)部門所有的業(yè)務(wù)數(shù)據(jù)以及業(yè)務(wù)日志等其他異構(gòu)數(shù)據(jù)源數(shù)據(jù),由平臺統(tǒng)一清洗對接。
- 服務(wù)共享
數(shù)據(jù)共享之后就由平臺統(tǒng)一對外輸出服務(wù),各個(gè)業(yè)務(wù)線無需自行重復(fù)開發(fā),就能快速得到平臺提供的數(shù)據(jù)支撐。
- 安全保障
由平臺提供統(tǒng)一的安全認(rèn)證等授權(quán)機(jī)制,可以做到對不同人進(jìn)行不同程度的細(xì)粒度授權(quán),保證數(shù)據(jù)安全。
二、企業(yè)業(yè)務(wù)對數(shù)據(jù)方面的需求
隨著業(yè)務(wù)的快速發(fā)展,構(gòu)建統(tǒng)一的實(shí)時(shí)數(shù)倉迫在眉睫,綜合 0.x、1.0 版本的平臺架構(gòu),綜合業(yè)務(wù)的現(xiàn)在發(fā)展和未來趨勢判斷,構(gòu)建 2.x 版本數(shù)據(jù)平臺的需求主要集中在以下幾個(gè)方面:
- 實(shí)時(shí)大屏
實(shí)時(shí)大屏需要替換舊的準(zhǔn)實(shí)時(shí)大屏,采用更可靠、低延遲的技術(shù)方案。
- 統(tǒng)一數(shù)據(jù)服務(wù)
高性能、高并發(fā)和高可用的數(shù)據(jù)服務(wù)成為企業(yè)數(shù)字化轉(zhuǎn)型統(tǒng)一數(shù)據(jù)門戶的關(guān)鍵,需要構(gòu)建一個(gè)統(tǒng)一的數(shù)據(jù)門戶,統(tǒng)一對外輸出。
- 實(shí)時(shí)數(shù)倉
數(shù)據(jù)時(shí)效性在企業(yè)運(yùn)營中的重要性日益凸現(xiàn),需要響應(yīng)更快更及時(shí)。
三、實(shí)時(shí)數(shù)倉和統(tǒng)一數(shù)據(jù)服務(wù)技術(shù)方案
1. 整體技術(shù)架構(gòu)
技術(shù)架構(gòu)主要分為四個(gè)部分,分別是數(shù)據(jù) ETL、實(shí)時(shí)數(shù)倉、離線數(shù)倉和數(shù)據(jù)應(yīng)用。
- 數(shù)據(jù) ETL 是對業(yè)務(wù)數(shù)據(jù)庫和業(yè)務(wù)日志進(jìn)行實(shí)時(shí)處理,統(tǒng)一使用 Flink 實(shí)時(shí)計(jì)算,
- 實(shí)時(shí)數(shù)倉中數(shù)據(jù)實(shí)時(shí)處理后進(jìn)入 Hologres 存儲與分析
- 業(yè)務(wù)冷數(shù)據(jù)存儲在 Hive 離線數(shù)倉,并同步到 Hologres 做進(jìn)一步的數(shù)據(jù)分析處理
- 由 Hologres 統(tǒng)一對接常用的 BI 工具,如 Tableau、Quick BI、DataV 和業(yè)務(wù)系統(tǒng)等。
2. 實(shí)時(shí)數(shù)倉數(shù)據(jù)模型
如上所示,實(shí)時(shí)數(shù)倉和離線數(shù)倉有一些相似的地方,只不過少一些其它層的鏈路。
- 第一層是原始數(shù)據(jù)層,數(shù)據(jù)來源有兩種類型,一種是業(yè)務(wù)庫的 Binlog,第二種是服務(wù)器的業(yè)務(wù)日志,統(tǒng)一用 Kafka 作為存儲介質(zhì)。
- 第二層是數(shù)據(jù)明細(xì)層,將原始數(shù)據(jù)層 Kafka 里面的信息進(jìn)行 ETL 提取,作為實(shí)時(shí)明細(xì)存儲至 Kafka。這樣做的目的是為了方便下游不同消費(fèi)者同時(shí)訂閱,同時(shí)方便后續(xù)應(yīng)用層的使用。維表數(shù)據(jù)也是通過 Hologres 存儲,來滿足下面的數(shù)據(jù)關(guān)聯(lián)或者條件過濾。
- 第三是數(shù)據(jù)應(yīng)用層,這里除了打通 Hologres,還使用了 Hologres 對接了 Hive,由 Hologres 統(tǒng)一提供上層應(yīng)用服務(wù)。
3. 整體技術(shù)架構(gòu)數(shù)據(jù)流
下面的數(shù)據(jù)流圖可以具象加深整體架構(gòu)的規(guī)劃和數(shù)倉模型整體的數(shù)據(jù)流向。
從圖中可以看出,主要分為三個(gè)模塊:
- 第一個(gè)是集成處理;
- 第二個(gè)是實(shí)時(shí)數(shù)倉;
- 第三塊是數(shù)據(jù)應(yīng)用。
從數(shù)據(jù)的流入流出看到主要的核心有兩點(diǎn):
- 第一個(gè)核心是 Flink 的實(shí)時(shí)計(jì)算:可以從 Kafka 獲取,或者直接 Flink cdt 讀取 MySQL Binlog 數(shù)據(jù),或者直接再寫回 Kafka 集群,這是一個(gè)核心。
- 第二個(gè)核心是統(tǒng)一數(shù)據(jù)服務(wù):現(xiàn)在統(tǒng)一數(shù)據(jù)服務(wù)是由 Hologres 完成,避免數(shù)據(jù)孤島產(chǎn)生的問題,或者一致性難以維護(hù)等,也加速了離線數(shù)據(jù)的分析。
四、具體實(shí)踐細(xì)節(jié)
1. 大數(shù)據(jù)技術(shù)選型
方案執(zhí)行分為兩個(gè)部分:實(shí)時(shí)與服務(wù)分析。實(shí)時(shí)方面我們選擇了阿里云 Flink 全托管的方式,它主要有以下幾方面優(yōu)點(diǎn):
- 狀態(tài)管理與容錯(cuò)機(jī)制;
- Table API 和 Flink SQL 支持;
- 高吞吐低延遲;
- Exactly Once 語義支持;
- 流批一體;
- 全托管等增值服務(wù)。
服務(wù)分析方面我們選擇了阿里云 Hologres 交互式分析,它帶來了幾點(diǎn)好處:
- 極速響應(yīng)分析;
- 高并發(fā)讀寫;
- 計(jì)算存儲分離;
- 簡單易用。
2. 實(shí)時(shí)大屏業(yè)務(wù)實(shí)踐落地
上圖為業(yè)務(wù)實(shí)時(shí)大屏新舊方案對比。
以訂單為例,舊方案中的訂單是從訂單從庫通過 DTS 同步到另一個(gè)數(shù)據(jù)庫,這雖然是實(shí)時(shí)的,但是在計(jì)算與處理這方面,主要是通過定時(shí)任務(wù),比如調(diào)度間隔時(shí)間設(shè)為 1 分鐘或者 5 分鐘來完成數(shù)據(jù)的實(shí)時(shí)更新,而銷售層、管理層需要更實(shí)時(shí)地掌握業(yè)務(wù)動(dòng)態(tài),,因此并不能算真正意義上的實(shí)時(shí)。除此之外,響應(yīng)慢且不穩(wěn)定也是很大的問題。
新方案采用的是 Flink 實(shí)時(shí)計(jì)算 + Hologres 架構(gòu)。
開發(fā)方式完全是可以利用 Flink 的 SQL 支持,對于我們之前的 MySQL 計(jì)算開發(fā)方式,可以說是一個(gè)無縫的遷移,實(shí)現(xiàn)快速落地。數(shù)據(jù)分析和服務(wù)統(tǒng)一使用 Hologres。還是以訂單為例,比如今日訂單營收額,今日訂單用戶數(shù)或者今日訂單用戶量,隨著業(yè)務(wù)多樣性的增加,可能需要增加城市維度。通過 Hologres 的分析能力,可以完美支撐營收額、訂單量、訂單用戶數(shù)以及城市維度的一些指標(biāo)做快速展示。
3. 實(shí)時(shí)數(shù)倉和統(tǒng)一數(shù)據(jù)服務(wù)實(shí)踐落地
以某塊業(yè)務(wù)場景為例,比如量級比較大的業(yè)務(wù)日志,日均數(shù)據(jù)量在 TB 級別。下面先來分析一下舊方案的痛點(diǎn):
- 數(shù)據(jù)時(shí)效性差:由于數(shù)據(jù)量較大,所以在舊方案中使用了每小時(shí)離線調(diào)度的策略進(jìn)行數(shù)據(jù)計(jì)算。但是該方案時(shí)效性較差,無法滿足眾多業(yè)務(wù)產(chǎn)品的實(shí)時(shí)需求,例如硬件系統(tǒng)需要實(shí)時(shí)知道設(shè)備當(dāng)前狀態(tài),如告警、錯(cuò)誤、空倉等,以及時(shí)做出相應(yīng)的決策行動(dòng)。
- 數(shù)據(jù)孤島:舊方案使用 Tableau 對接大量業(yè)務(wù)報(bào)表,報(bào)表用于分析過去一個(gè)小時(shí)或者過去一天,設(shè)備上報(bào)有多少數(shù)量,哪些設(shè)備上報(bào)出現(xiàn)異常等。針對不同的場景,會將之前通過 Spark 離線計(jì)算的數(shù)據(jù),再備份存儲到 MySQL 或者 Redis 上。這樣就多套系統(tǒng),形成數(shù)據(jù)孤島,這些數(shù)據(jù)孤島對平臺維護(hù)是一個(gè)巨大的挑戰(zhàn)。
現(xiàn)在通過 2.0 Flink+Hologres 架構(gòu),可以將業(yè)務(wù)日志進(jìn)行改造。
- 以前 TB 級別的日志量在 Flink 高分子低延遲的計(jì)算框架下完全沒有壓力。例如之前的 flume HDFS 到 Spark 的一個(gè)鏈路直接被廢棄,取而代之的是 Flink,我們只需要維護(hù)一個(gè) Flink 的計(jì)算框架即可。
- 設(shè)備狀態(tài)數(shù)據(jù)采集的時(shí)候都是一些非結(jié)構(gòu)的數(shù)據(jù),需要對數(shù)據(jù)進(jìn)行清洗,之后再返回 Kafka,因?yàn)橄M(fèi)者可能是多樣化的,這樣可以方便下游的多個(gè)消費(fèi)者同時(shí)訂閱。
- 在剛才的場景中,硬件系統(tǒng)需要高并發(fā)、實(shí)時(shí)查詢上千萬的設(shè)備(充電寶)狀態(tài),對服務(wù)能力的要求較高。通過 Hologres 提供高并發(fā)讀寫能力,關(guān)聯(lián)狀態(tài)設(shè)備建立主鍵表,可以實(shí)時(shí)更新狀態(tài),滿足 CRM 系統(tǒng)對設(shè)備(充電寶)的實(shí)時(shí)查詢。
- 同時(shí)在 Hologres 還會存最近的熱點(diǎn)明細(xì)數(shù)據(jù),直接提供對外服務(wù)。
4. 業(yè)務(wù)支撐效果
通過 Flink+Hologres 的新方案,我們支撐了三大場景:
- 實(shí)時(shí)大屏
業(yè)務(wù)層面更高效地迭代多樣化需求,同時(shí)降低了開發(fā)、運(yùn)維維護(hù)開銷。
- 統(tǒng)一數(shù)據(jù)服務(wù)
通過一個(gè) HSAP 系統(tǒng)來實(shí)現(xiàn)服務(wù)/分析一體化,避免數(shù)據(jù)孤島以及一致性、安全性等問題。
- 實(shí)時(shí)數(shù)倉
滿足企業(yè)運(yùn)營中對于數(shù)據(jù)時(shí)效性越來越高的要求,秒級響應(yīng)。
五、未來規(guī)劃
伴隨著業(yè)務(wù)的迭代,我們未來在大數(shù)據(jù)平臺的規(guī)劃主要有兩點(diǎn):流批一體和完善實(shí)時(shí)數(shù)倉。
- 現(xiàn)在的大數(shù)據(jù)平臺總的來說還是離線架構(gòu)和實(shí)時(shí)架構(gòu)混合,后續(xù)會廢棄冗余的離線代碼架構(gòu),借助 Flink 的流批一體統(tǒng)一計(jì)算引擎。
- 另外,我們目前只遷移了部分業(yè)務(wù),所以會參考之前已經(jīng)完善的離線數(shù)倉指標(biāo)系統(tǒng)體系,來滿足我們現(xiàn)在的實(shí)時(shí)數(shù)倉建設(shè),全面遷移到 2.0 Flink + Hologres 架構(gòu)上。
通過未來的規(guī)劃,我們希望同 Flink 全托管和 Hologres 一起共建更加完善的實(shí)時(shí)數(shù)倉,但也在此對其有著更近一步的需求:
1. 對 Flink 全托管的需求
Flink 全托管中的 SQL 編輯器編寫 FlinkSQL 作業(yè)很高效方便,并且也提供了很多常見的 SQL 上下游 Connector 滿足開發(fā)需求。但是仍有一些需求希望Flink全托管在后續(xù)的迭代中支持:
- SQL 作業(yè)版本控制和兼容性監(jiān)測;
- SQL 作業(yè)支持 Hive3.X 集成;
- DataStream 作業(yè)打包更方便、資源包上傳速度更快;
- Session 集群模式部署的任務(wù)支持自動(dòng)調(diào)優(yōu)功能。
2. 對 Hologres 交互式分析的需求
Hologres 不僅能夠支持高并發(fā)地實(shí)時(shí)寫入和查詢,并且兼容 PostgreSQL 生態(tài),方便接入使用統(tǒng)一數(shù)據(jù)服務(wù)。但是仍有一些需求希望 Hologres 能在后期迭代中支持:
- 支持熱升級操作,減少對業(yè)務(wù)的影響;
- 支持?jǐn)?shù)據(jù)表備份、支持讀寫分離;
- 支持加速查詢阿里云 EMR-Hive 數(shù)倉;
- 支持對用戶組進(jìn)行計(jì)算資源管理。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的来电科技:基于 Flink + Hologres 的实时数仓演进之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云推出业内首个云原生企业级数据湖解决
- 下一篇: Flink 1.11 SQL 十余项革新