數據倉庫的建設是「數據智能」必不可少的一環,也是大規模數據應用中必然面臨的挑戰,而 Flink 實時數倉在數據鏈路中扮演着極爲重要的角色。本文中,美團點評高級技術專家魯昊爲你們分享了美團點評基於 Apache Flink 的實時數倉平臺實踐。前端
做者:魯昊@美團點評算法
更多2019 Flink Forward 大會視頻>>>小程序
在 2016 年,美團點評就已經基於 Storm 實時計算引擎實現了初步的平臺化。2017 年初,咱們引入了 Spark Streaming 用於特定場景的支持,主要是在數據同步場景方面的嘗試。在 2017 年末,美團點評實時計算平臺引入了 Flink。相比於 Storm 和 Spark Streaming,Flink 在不少方面都具備優點。這個階段咱們進行了深度的平臺化,主要關注點是安全、穩定和易用。從 19 年開始,咱們致力於建設包括實時數倉、機器學習等特定場景的解決方案來爲業務提供更好的支持。後端
目前,美團點評的實時計算平臺日活躍做業數量爲萬級,高峯時做業處理的消息量達到每秒 1.5 億條,而機器規模也已經達到了幾千臺,而且有幾千位用戶正在使用實時計算服務。安全
以下圖所示的是美團點評實時計算平臺的架構。架構
本次分享主要介紹實時數倉方面的建設狀況。框架
從功能角度來看,美團點評的實時計算平臺主要包括做業和資源管理兩個方面的功能。其中,做業部分包括做業配置、做業發佈以及做業狀態三個方面的功能。運維
在資源管理方面,則爲用戶提供了多租戶資源隔離以及資源交付和部署的能力。機器學習
前面提到,如今的美團點評實時計算平臺更多地會關注在安全、易用和穩定方面,而應用上很大的一個場景就是業務數倉。接下來會爲你們分享幾個業務數倉的例子。函數
第一個例子是流量,流量數倉是流量類業務的基礎服務,從業務通道而言,會有不一樣通道的埋點和不一樣頁面的埋點數據,經過日誌收集通道會進行基礎明細層的拆分,按照業務維度劃分不一樣的業務通道,如美團通道、外賣通道等。
基於業務通道還會進行一次更加細粒度的拆分,好比曝光日誌、猜你喜歡、推薦等。以上這些包括兩種使用方式,一種是以流的方式提供下游其餘業務方使用,另一方面就是作一些流量方面的實時分析。
下圖中右邊是流量數倉的架構圖,自下向上分爲四層,分別是 SDK 層,包括了前端、小程序以及 APP 的埋點;其上是收集層,埋點日誌落地到 Nginx,經過日誌收集通道收到 Kafka 中。在計算層,流量團隊基於 Storm 能力實現了上層的 SQL 封裝,並實現了 SQL 動態更新的特性,在 SQL 變動時沒必要重啓做業。
這裏再舉一個基於流量數倉的例子-廣告實時效果驗證。下圖中左側是廣告實時效果的對比圖。廣告的打點通常分爲請求(PV)打點、SPV(Server PV)打點、CPV(Client PV)曝光打點和 CPV 點擊打點,在全部打點中都會包含一個流量的 requestID 和命中的實驗路徑。根據 requestID 和命中的實驗路徑能夠將全部的日誌進行 join,獲得一個 request 中須要的全部數據,而後將數據存入 Durid 中進行分析,支持實際 CTR、預估 CTR 等效果驗證。
這裏列舉的另一個業務數倉實踐的例子是即時配送。實時數據在即時配送的運營策略上發揮了重要做用。以送達時間預估爲例,交付時間衡量的是騎手送餐的交付難度,整個履約時間分爲了多個時間段,配送數倉會基於 Storm 作特徵數據的清洗、提取,供算法團隊進行訓練並獲得時間預估的結果。這個過程涉及到商家、騎手以及用戶的多方參與,數據的特徵會很是多,數據量也會很是大。
業務實時數倉大體分爲三類場景:流量類、業務類和特徵類,這三種場景各有不一樣。
上面爲你們介紹了實時數倉的業務場景,接下來爲你們介紹實時數倉的演進過程和美團點評的實時數倉平臺建設思路。
爲了更有效地組織和管理數據,數倉建設每每會進行數據分層,通常自下而上分爲四層:ODS(操做數據層)、DWD(數據明細層)、DWS(彙總層)和應用層。即時查詢主要經過 Presto、Hive 和 Spark 實現。
實時數倉的分層方式通常也遵照傳統數據倉庫模型,也分爲了 ODS 操做數據集、DWD 明細層和 DWS 彙總層以及應用層。但實時數倉模型的處理的方式卻和傳統數倉有所差異,如明細層和彙總層的數據通常會放在 Kafka 上,維度數據通常考慮到性能問題則會放在 HBase 或者 Tair 等 KV 存儲上,即席查詢則可使用 Flink 完成。
在以上兩種數倉模型以外,咱們發現業務方在實踐過程當中還有一種準實時數倉模型,其特色是不徹底基於流去作,而是將明細層數據導入到 OLAP 存儲中,基於 OLAP 的計算能力去作彙總並進行進一步的加工。
實時數倉和傳統數倉的對比主要能夠從四個方面考慮:
下圖中對於實時數倉的兩種建設方式,即準實時數倉和實時數倉兩種方式進行了對比。它們的實現方式分別是基於 OLAP 引擎和流計算引擎,實時度則分別是分鐘和秒級。
總結一下,基於 OLAP 引擎的建設方式是數據量不太大,業務流量不過高狀況下爲了提升時效性和開發效率的一個折中方案,從將來的發展趨勢來看,基於流計算的實時數倉更具備發展前景。
從業務實踐過程當中,咱們看到了業務建設實時數倉的共同需求,包括髮現不一樣業務的元數據是割裂的,業務開發也傾向於使用 SQL 方式同時開發離線數倉和實時數倉,須要更多的運維工具支持。所以咱們規劃了一站式解決方案,但願可以將整個流程貫通。
這裏的一站式解決方案主要爲用戶提供了數據開發工做平臺、元數據管理。同時咱們考慮到業務從生產到應用過程當中的問題,咱們 OLAP 生產平臺,從建模方式、生產任務管理和資源方面解決 OLAP 生產問題。左側是咱們已經具有數據安全體系、資源體系和數據治理,這些是離線數倉和實時數倉能夠共用的。
實時數倉平臺建設之因此選擇 Flink 是基於如下四個方面的考慮,這也是實時數倉方面關注的比較核心的問題。
實時數倉平臺的建設思路從外到內分爲了四個層次,咱們認爲平臺應該作的事情是爲用戶提供抽象的表達能力,分別是消息表達、數據表達、計算表達以及流和批統一。
以下圖所示的是美團點評的實時數倉平臺架構,從下往上看,資源層和存儲層複用了實時計算平臺的能力,在引擎層則會基於 Flink Streaming 實現一些擴展能力,包括對 UDF 的集成和 Connector 的集成。再往上是基於 Flink SQL 獨立出來的 SQL 層,主要負責解析、校驗和優化。在這之上是平臺層,包括開發工做臺、元數據、UDF 平臺以及 OLAP 平臺。最上層則是平臺所支持的實時數倉的應用,包括實時報表、實時 OLAP、實時 Dashboard 和實時特徵等。
在消息表達層面,由於 Binlog、埋點日誌、後端日誌以及 IoT 數據等的數據格式是不一致的,所以美團點評的實時數倉平臺提供數據接入的流程,可以幫助你們把數據同步到 ODS 層。這裏主要實現了兩件事情,分別是統一消息協議和屏蔽處理細節。
以下圖左側是接入過程的一個例子,對於 Binlog 類型數據,實時數倉平臺還爲你們提供了分庫分表的支持,可以將屬於同一個業務的不一樣的分庫分表數據根據業務規則收集到同一個 ODS 表中去。
美團點評實時數倉平臺基於 Flink 擴展了 DDL,這部分工做的主要目的是建設元數據體系,打通內部的主流實時存儲,包括 KV 數據、OLAP 數據等。因爲開發工做臺和元數據體系是打通的,所以不少數據的細節並不須要你們在 DDL 中明確地聲明出來,只須要在聲明中寫上數據的名字,和運行時的一些設置,好比 MQ 從最新消費仍是最舊消費或者從某個時間戳消費便可,其餘的數據訪問方式是一致的。
對於 UDF 平臺而言,須要從三個層面考慮:
UDF 的應用其實很是普遍,UDF 平臺並非只支持實時數倉,也會同時支持離線數倉、機器學習以及查詢服務等應用場景。下圖中右側展現的是 UDF 的使用案例,左圖是 UDF 的開發流程,用戶只須要關心註冊流程,接下來的編譯打包、測試以及上傳等都由平臺完成;右圖是 UDF 的使用流程中,用戶只須要聲明 UDF,平臺會進行解析校驗、路徑獲取以及在做業提交的時候進行集成。
最後介紹一下實時數倉平臺的開發工做臺,以 Web IDE 的形式集成了模型、做業以及 UDF 的管理,用戶能夠在 Web IDE 上以 SQL 方式開發。平臺會對 SQL 作一些版本的管理,而且支持用戶回退到已部署成功的版本上去。
從整個實時計算角度來考慮,目前美團點評的實時計算平臺的節點數已經達到了幾千臺,將來極可能會達到上萬臺,所以資源優化這件事情很快就會被提上日程。因爲業務自己的流量存在高峯和低谷,對於一個實時任務來講,可能在高峯時須要不少資源,可是在低谷時並不須要那麼多資源。
另一方面,波峯自己也是會發生變化的,有可能隨着業務的上漲使得原來分配的資源數量不夠用。所以,資源自動調優有兩個含義,一個是指可以適配做業的高峯流量上漲,自動適配 Max 值;另一個含義是指使得做業可以在高峯過去以後自動適應流量減小,可以快速縮容。咱們能夠經過每一個任務甚至是算子的歷史運行狀況,擬合獲得算子、流量與資源的關係函數,在流量變化時同步調整資源量。
以上是資源優化的思路,除此以外還須要考慮當資源完成優化以後應該如何利用。爲了保證可用性,實時和離線任務通常會分開部署,不然帶寬、IO 均可能被離線計算打滿致使實時任務延遲。而從資源使用率角度出發,則須要考慮實時和離線的混合部署,或者以流的方式來處理一些實時性要求並非很是高的任務。這就要求更細粒度的資源隔離和更快的資源釋放。
實時數倉的建設通常分爲幾個步驟:
目前,美團點評的實時數倉平臺建設工做還集中在統一表達的層次,距離理想狀態仍然有比較長的一段路要走。