表格存儲(Table Store)是阿里雲自研的NoSQL多模型數據庫,提供PB級結構化數據存儲、千萬TPS以及毫秒級延遲的服務能力。在實時計算場景裏,表格存儲強大的寫入能力和多模型的存儲形態,使其不只能夠做爲計算結果表,同時也徹底具有做爲實時計算源表的能力。
通道服務是表格存儲提供的全增量一體化數據消費功能,爲用戶提供了增量、全量和增量加全它量三種類型的分佈式數據實時消費通道。實時計算場景下,經過爲數據表創建數據通道,用戶能夠以流式計算的方式對錶中歷史存量和新增數據作數據消費。html
利用表格存儲存儲引擎強大的寫入能力和通道服務完備的流式消費能力,用戶能夠輕鬆作到數據存儲和實時處理all in one!前端
Blink是阿里雲在Apache Flink基礎上深度改進的實時計算平臺,同Flink一致Blink旨在將流處理和批處理統一,但Blink相對於社區版Flink,在穩定性上有不少優化,在某些場景特別是在大規模場景會比Flink更加穩定。Blink的另外一個重大改進是實現了全新的 Flink SQL 技術棧,在功能上,Blink支持如今標準 SQL 幾乎全部的語法和語義,在性能上,Blink也比社區Flink更增強大,特別是在批 SQL 的性能方面,當前 Blink 版本是社區版本性能的 10 倍以上,跟 Spark 相比,在 TPCDS 這樣的場景 Blink 的性能也能達到 3 倍以上[1]
。數據庫
從用戶技術架構角度分析,結合表格存儲和Blink能夠作到:1. 存儲側,使用表格存儲,則能夠作到寫一份數據,業務當即可見,同時原生支持後續流式計算消費,無需業務雙寫;2. 計算側,使用Blink流批一體處理引擎,能夠統一流批計算架構,開發一套代碼支持流批兩個需求場景。架構
本文就將爲你們介紹實時計算的最佳架構實踐:基於表格存儲和Blink的實時計算架構,並帶快速體驗基於表格存儲和Blink的數據分析job。less
咱們以一個作態勢感知的大數據分析系統爲例,爲你們闡述表格存儲和Blink實時計算的架構優點。假如客戶是大型餐飲企業CEO,連鎖店遍及全國各地,CEO很是關心本身有沒有服務好全國各地的吃貨,好比臺灣顧客和四川顧客在口味評價上會不會有不一樣?本身的菜品是否已經熱度降低了?爲了解決這些問題,CEO須要一個大數據分析系統,一方面能夠實時監控各地菜品銷售額信息,另外一方面也但願能有按期的歷史數據分析,能給出本身關心的客戶變化趨勢。運維
用技術角度來解讀,就是客戶須要:1. 客戶數據的實時處理能力,持續聚合新增的訂單信息,能大屏展現和以日報形式展現;2.對歷史數據的離線分析能力,分析離線數據作態勢感知、決策推薦。分佈式
經典的解決方案基本上基於Lambda大數據架構[2]
,以下圖1,用戶數據既須要進入消息隊列系統(New Data Stream如Kafka)做爲實時計算任務的輸入源,又須要進入數據庫系統(All Data如HBASE)來支持批處理系統,最終二者的結果寫入數據庫系統(MERGED VIEW),展現給用戶。性能
這個系統的缺點就是太龐大,須要維護多個分佈式子系統,數據既要寫入消息隊列又要進入數據庫,要處理二者的雙寫一致性或者維護二者的同步方案,計算方面要維護兩套計算引擎、開發兩套數據分析代碼,技術難度和人力成本很高。
利用表格存儲同時具有強大的寫入能力、實時數據消費能力,Blink + SQL的高性能和流批融合,經典Lambda架構能夠精簡爲下圖2,基於表格存儲和Blink的實時計算架構:大數據
該架構引入的依賴系統大大減小,人力和資源成本都明顯降低,它的基本流程只包括:優化
介紹完架構,咱們就來迅速開發一個基於TableStore和Blink的日報實時計算SQL,以流計算的方式統計每日各個城市的實時用餐單數和餐費銷售額。
在Blink開發界面,建立消費訂單源表、日統計結果表、每分鐘聚合視圖和寫入SQL:
---消費訂單源表 CREATE TABLE source_order ( id VARCHAR,-- 訂單ID restaurant_id VARCHAR, --餐廳ID customer_id VARCHAR,--買家ID city VARCHAR,--用餐城市 price VARCHAR,--餐費金額 pay_day VARCHAR, --訂單時間 yyyy-MM-dd primary(id) ) WITH ( type='ots', endPoint ='http://blink-demo.cn-hangzhou.ots-internal.aliyuncs.com', instanceName = "blink-demo", tableName ='consume_source_table', tunnelName = 'blink-demo-stream', ); ---日統計結果表 CREATE TABLE result_summary_day ( summary_date VARCHAR,--統計日期 total_price BIGINT,--訂單總額 total_order BIGINT,--訂單數 primary key (summary_date) ) WITH ( type= 'ots', endPoint ='http://blink-demo.cn-hangzhou.ots-internal.aliyuncs.com', instanceName = "blink-demo", tableName ='result_summary_day', column='summary_date,total_price,total_order' ); INSERT into result_summary_day select cast(pay_day as bigint) as summary_date, --時間分區 count(id) as total_order, --客戶端的IP sum(price) as total_order, --客戶端去重 from source_ods_fact_log_track_action group by pay_day;
使用表格存儲和Blink的大數據分析架構,相對於傳統開源解決方案,有不少優點:
一、強大的存儲和計算引擎,表格存儲除了海量存儲、極高的讀寫性能外,還提供了多元索引、二級索引、通道服務等多種數據分析功能,相對HBASE等開源方案優點明顯,Blink關鍵性能指標爲開源Flink的3到4倍,數據計算延遲優化到秒級甚至亞秒級;
二、全託管服務,表格存儲和Blink都全託管的serverless服務,即開即用;
三、低廉的人力和資源成本,依賴服務全serverless免運維,按量付費,避免波峯波谷影響;
篇幅緣由,本文主要介紹了表格存儲和Blink結合的大數據架構優點,以及簡單SQL演示,後續更復雜、貼近場景業務的文章也會陸續推出,敬請期待!
1. Blink解密,https://yq.aliyun.com/articles/689117
2. Lambda大數據架構,https://mapr.com/developercentral/lambda-architecture/
本文爲雲棲社區原創內容,未經容許不得轉載。