阿里妹導讀:大數據與現有的科技手段結合,對大多數產業而言都能產生巨大的經濟及社會價值。這也是當下許多企業,在大數據上深耕的緣由。大數據分析場景須要解決哪些技術挑戰?目前,有哪些主流大數據架構模式及其發展?今天,咱們都會一一解讀,並介紹如何結合雲上存儲、計算組件,實現更優的通用大數據架構模式,以及該模式能夠涵蓋的典型數據處理場景。
如今已經有愈來愈多的行業和技術領域需求大數據分析系統,例如金融行業須要使用大數據系統結合 VaR(value at risk) 或者機器學習方案進行信貸風控,零售、餐飲行業須要大數據系統實現輔助銷售決策,各類 IOT 場景須要大數據系統持續聚合和分析時序數據,各大科技公司須要創建大數據分析中臺等等。算法
抽象來看,支撐這些場景需求的分析系統,面臨大體相同的技術挑戰:數據庫
Lambda 架構架構
Lambda 架構是目前影響最深入的大數據處理架構,它的核心思想是將不可變的數據以追加的方式並行寫到批和流處理系統內,隨後將相同的計算邏輯分別在流和批系統中實現,而且在查詢階段合併流和批的計算視圖並展現給用戶。Lambda的提出者 Nathan Marz 還假定了批處理相對簡單不易出現錯誤,而流處理相對不太可靠,所以流處理器可使用近似算法,快速產生對視圖的近似更新,而批處理系統會採用較慢的精確算法,產生相同視圖的校訂版本。併發
Lambda架構典型數據流程是(http://lambda-architecture.net/)):app
Lambda 架構設計推廣了在不可變的事件流上生成視圖,而且能夠在必要時從新處理事件的原則,該原則保證了系統隨需求演進時,始終能夠建立相應的新視圖出來,切實可行地知足了不斷變化的歷史數據和實時數據分析需求。框架
Lambda 架構的四個挑戰less
Lambda 架構很是複雜,在數據寫入、存儲、對接計算組件以及展現層都有複雜的子課題須要優化:運維
流批融合的 Lambda 架構機器學習
針對 Lambda 架構的問題3,計算邏輯須要分別在流批框架中實現和運行的問題,很多計算引擎已經開始往流批統一的方向去發展,例如 Spark 和 Flink,從而簡化lambda 架構中的計算部分。實現流批統一一般須要支持:分佈式
1.以相同的處理引擎來處理實時事件和歷史回放事件;
2.支持 exactly once 語義,保證有無端障狀況下計算結果徹底相同;
3.支持以事件發生時間而不是處理時間進行窗口化。
Kappa架構
Kappa 架構由 Jay Kreps 提出,不一樣於 Lambda 同時計算流計算和批計算併合並視圖,Kappa 只會經過流計算一條的數據鏈路計算併產生視圖。Kappa 一樣採用了從新處理事件的原則,對於歷史數據分析類的需求,Kappa 要求數據的長期存儲可以以有序 log 流的方式從新流入流計算引擎,從新產生歷史數據的視圖。
Kappa 方案經過精簡鏈路解決了1數據寫入和3計算邏輯複雜的問題,但它依然沒有解決存儲和展現的問題,特別是在存儲上,使用相似 kafka 的消息隊列存儲長期日誌數據,數據沒法壓縮,存儲成本很大,繞過方案是使用支持數據分層存儲的消息系統(如 Pulsar,支持將歷史消息存儲到雲上存儲系統),可是分層存儲的歷史日誌數據僅能用於 Kappa backfill 做業,數據的利用率依然很低。
Lambda 和 Kappa 的場景區別:
Kappa+
Kappa+是 Uber 提出流式數據處理架構,它的核心思想是讓流計算框架直讀 HDFS類的數倉數據,一併實現實時計算和歷史數據 backfill 計算,不須要爲 backfill 做業長期保存日誌或者把數據拷貝回消息隊列。Kappa+ 將數據任務分爲無狀態任務和時間窗口任務,無狀態任務比較簡單,根據吞吐速度合理併發掃描全量數據便可,時間窗口任務的原理是將數倉數據按照時間粒度進行分區存儲,窗口任務按時間序一次計算一個 partition 的數據,partition 內亂序併發,全部分區文件所有讀取完畢後,全部 source 才進入下個 partition 消費並更新 watermark。事實上,Uber 開發了Apache hudi 框架來存儲數倉數據,hudi 支持更新、刪除已有 parquet 數據,也支持增量消費數據更新部分,從而系統性解決了問題2存儲的問題。下圖3是完整的Uber 大數據處理平臺,其中 Hadoop -> Spark -> Analytical data user 涵蓋了Kappa+ 數據處理架構。
混合分析系統的 Kappa 架構
Lambda 和 Kappa 架構都還有展現層的困難點,結果視圖如何支持 ad-hoc 查詢分析,一個解決方案是在 Kappa 基礎上衍生數據分析流程,以下圖4,在基於使用Kafka + Flink 構建 Kappa 流計算數據架構,針對Kappa 架構分析能力不足的問題,再利用 Kafka 對接組合 ElasticSearch 實時分析引擎,部分彌補其數據分析能力。可是 ElasticSearch 也只適合對合理數據量級的熱數據進行索引,沒法覆蓋全部批處理相關的分析需求,這種混合架構某種意義上屬於 Kappa 和 Lambda 間的折中方案。
Lambda plus 是基於 Tablestore 和 Blink 打造的雲上存在能夠複用、簡化的大數據架構模式,架構方案全 serverless 即開即用,易搭建免運維。
表格存儲(Tablestore)是阿里雲自研的 NoSQL 多模型數據庫,提供 PB 級結構化數據存儲、千萬 TPS 以及毫秒級延遲的服務能力,表格存儲提供了通道服務(TunnelService)支持用戶以按序、流式地方式消費寫入表格存儲的存量數據和實時數據,同時表格存儲還提供了多元索引功能,支持用戶對結果視圖進行實時查詢和分析。
Blink 是阿里雲在 Apache Flink 基礎上深度改進的實時計算平臺,Blink 旨在將流處理和批處理統一,實現了全新的 Flink SQL 技術棧,在功能上,Blink 支持如今標準 SQL 幾乎全部的語法和語義,在性能上,Blink 也比社區Flink更增強大。
在 TableStore + Blink 的雲上 Lambda 架構中,用戶能夠同時使用表格存儲做爲master dataset 和 batch&stream view,批處理引擎直讀表格存儲產生 batch view,同時流計算引擎經過 Tunnel Service 流式處理實時數據,持續生成 stream view。
如上圖5,其具體組件分解:
Tablestore 直接做爲 master dataset,支持用戶直讀,配合 Tablestore 多元索引,用戶的線上服務直讀、ad-hoc 查詢 master dataset 並將結果返回給用戶;Blink 批處理任務向 Tablestore 下推 SQL 的查詢條件,直讀 Tablestore master dataset,計算 batch view,並將 batch view 從新寫回 Tablestore;
Blink 流處理任務經過表格存儲 TunnelService API 直讀 master dataset 中的實時數據,持續產生 stream view;Kappa 架構的 backfill任務,能夠經過創建全量類型數據通道,流式消費 master dataset 的存量數據,重新計算;
爲存儲 batch view 和 stream view 的 Tablestore 結果表創建全局二級索引和多元索引,業務能夠低延遲、ad-hoc方式查詢;
針對上述 Lambda 架構1-4的技術問題,Lambda plus 的解決思路:
總結,表格存儲實現了 batch view、master dataset 直接查詢、stream view 的功能全集,Blink 實現流批統一,Tablestore 加 Blink 的 Lambda plus 模式能夠明顯簡化 Lambda 架構的組件數量,下降搭建和運維難度,拓展用戶數據價值。
存儲引擎的高併發、低延遲特性:表格存儲面向在線業務提供高併發、低延遲的訪問,而且 tps 按分區水平擴展,能夠有效支持批處理和 Kappa backfill 的高吞吐數據掃描和流計算按分區粒度併發實時處理;
使用通道服務精簡架構:Tablestore 數據通道支持用戶以按序、流式地方式消費寫入表格存儲的存量數據和實時數據,避免 Lambda 架構引入消息隊列系統以及master dataset 和隊列的數據一致性問題;
二級索引和多元索引的靈活查詢能力:存儲在表格存儲的 batch view 和 real-time view 可使用多元索引和二級索引實現 ad-hoc 查詢,使用多元索引進行聚合分析計算;同時展現層也能夠利用二級索引和多元索引直接查詢表格存儲 master dataset,不強依賴引擎計算結果。
基於 Tablestore 和 Blink 的 Lambda plus 架構,適用於基於分佈式 NoSQL 數據庫存儲數據的大數據分析場景,如 IOT、時序數據、爬蟲數據、用戶行爲日誌數據存儲等,數據量以 TB 級爲主。典型的業務場景如:
大數據輿情分析系統:
參考資料
[1].https://yq.aliyun.com/articles/704171?spm=a2c4e.11153959.0.0.229847a2BpWNvc
[2].http://lambda-architecture.net/
[3].http://shop.oreilly.com/product/0636920032175.do, Martin Kleppmann
[4].https://www.oreilly.com/ideas/applying-the-kappa-architecture-in-the-telco-industry
[5].https://www.oreilly.com/ideas/questioning-the-lambda-architecture,Jay Kreps
[6].http://milinda.pathirage.org/kappa-architecture.com/
[7].Moving from Lambda and Kappa Architectures to Kappa+ at Uber
[8].https://eng.uber.com/hoodie/, Prasanna Rajaperumal and Vinoth Chandar
[9].https://eng.uber.com/uber-big-data-platform/, Reza Shiftehfar
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。