Spark、Flink、CarbonData技術實踐最佳案例解析

當前無論是傳統企業還是互聯網公司對大數據實時分析和處理的要求越來越高,數據越實時價值越大,面向毫秒~秒級的實時大數據計算場景,Spark和Flink各有所長。CarbonData是一種高性能大數據存儲方案,已在20+企業生產環境上部署應用,其中最大的單一集群數據規模達到幾萬億。

為幫助開發者更深入的瞭解這三個大數據開源技術及其實際應用場景,9月8日,InfoQ聯合華為雲舉辦了一場實時大數據Meetup,集結了來自Databricks、華為及美團點評的大咖級嘉賓前來分享。

本文整理了其中的部分精彩內容,同時,作為本次活動的承辦方,InfoQ整理上傳了所有講師的演講PPT,感興趣的同學可以下載講師PPT獲取完整資料 。

Spark Structured Streaming特性介紹 (講師PPT下載)

作為Spark Structured Streaming最核心的開發人員、Databricks工程師,Tathagata Das(以下簡稱“TD”)在開場演講中介紹了Structured Streaming的基本概念,及其在存儲、自動流化、容錯、性能等方面的特性,在事件時間的處理機制,最後帶來了一些實際應用場景。

首先,TD對流處理所面對的問題和概念做了清晰的講解。TD提到,因為流處理具有如下顯著的複雜性特徵,所以很難建立非常健壯的處理過程:

一是數據有各種不同格式(Jason、Avro、二進制)、髒數據、不及時且無序;

二是複雜的加載過程,基於事件時間的過程需要支持交互查詢,和機器學習組合使用;

三是不同的存儲系統和格式(SQL、NoSQL、Parquet等),要考慮如何容錯。

因為可以運行在Spark SQL引擎上,Spark Structured Streaming天然擁有較好的性能、良好的擴展性及容錯性等Spark優勢。除此之外,它還具備豐富、統一、高層次的API,因此便於處理複雜的數據和工作流。再加上,無論是Spark自身,還是其集成的多個存儲系統,都有豐富的生態圈。這些優勢也讓Spark Structured Streaming得到更多的發展和使用。

流的定義是一種無限表(unbounded table),把數據流中的新數據追加在這張無限表中,而它的查詢過程可以拆解為幾個步驟,例如可以從Kafka讀取 JSON 數據,解析 JSON 數據,存入結構化Parquet表中,並確保端到端的容錯機制。其中的特性包括:

支持多種消息隊列,比如Files/Kafka/Kinesis等。

可以用join(), union()連接多個不同類型的數據源。

返回一個DataFrame,它具有一個無限表的結構。

你可以按需選擇SQL(BI分析)、DataFrame(數據科學家分析)、DataSet(數據引擎),它們有幾乎一樣的語義和性能。

把Kafka的JSON結構的記錄轉換成String,生成嵌套列,利用了很多優化過的處理函數來完成這個動作,例如from_json(),也允許各種自定義函數協助處理,例如Lambdas, flatMap。

在Sink步驟中可以寫入外部存儲系統,例如Parquet。在Kafka sink中,支持foreach來對輸出數據做任何處理,支持事務和exactly-once方式。

支持固定時間間隔的微批次處理,具備微批次處理的高性能性,支持低延遲的連續處理(Spark 2.3),支持檢查點機制(check point)。

秒級處理來自Kafka的結構化源數據,可以充分為查詢做好準備。

Spark SQL把批次查詢轉化為一系列增量執行計劃,從而可以分批次地操作數據。

Spark、Flink、CarbonData技術實踐最佳案例解析

在容錯機制上,Structured Streaming採取檢查點機制,把進度offset寫入stable的存儲中,用JSON的方式保存支持向下兼容,允許從任何錯誤點(例如自動增加一個過濾來處理中斷的數據)進行恢復。這樣確保了端到端數據的exactly-once。

在性能上,Structured Streaming重用了Spark SQL優化器和Tungsten引擎,而且成本降低了3倍!!更多的信息可以參考作者的 blog 。

Structured Streaming隔離處理邏輯採用的是可配置化的方式(比如定製JSON的輸入數據格式),執行方式是批處理還是流查詢很容易識別。同時TD還比較了批處理、微批次-流處理、持續流處理三種模式的延遲性、吞吐性和資源分配情況。

在時間窗口的支持上,Structured Streaming支持基於事件時間(event-time)的聚合,這樣更容易瞭解每隔一段時間發生的事情。同時也支持各種用戶定義聚合函數(User Defined Aggregate Function,UDAF)。另外,Structured Streaming可通過不同觸發器間分佈式存儲的狀態來進行聚合,狀態被存儲在內存中,歸檔採用HDFS的Write Ahead Log (WAL)機制。當然,Structured Streaming還可自動處理過時的數據,更新舊的保存狀態。因為歷史狀態記錄可能無限增長,這會帶來一些性能問題,為了限制狀態記錄的大小,Spark使用 水印(watermarking)來刪除不再更新的舊的聚合數據。允許支持自定義狀態函數,比如事件或處理時間的超時,同時支持Scala和Java。

TD在演講中也具體舉例了流處理的應用情況。在蘋果的信息安全平臺中,每秒將產生有百萬級事件,Structured Streaming可以用來做缺陷檢測,下圖是該平臺架構:

Spark、Flink、CarbonData技術實踐最佳案例解析

在該架構中,一是可以把任意原始日誌通過ETL加載到結構化日誌庫中,通過批次控制可很快進行災難恢復;二是可以連接很多其它的數據信息(DHCP session,緩慢變化的數據);三是提供了多種混合工作方式:實時警告、歷史報告、ad-hoc分析、統一的API允許支持各種分析(例如實時報警系統)等,支持快速部署。四是達到了百萬事件秒級處理性能。

更多信息,可以參考在線的文檔:

Structured Streaming編程在線指南

Databricks的blog

Databricks的產品

CarbonData原理、應用和新規劃 (講師PPT下載)

華為大數據架構師蔡強在以CarbonData為主題的演講中主要介紹了企業對數據應用的挑戰、存儲產品的選型決策,並深入講解了CarbonData的原理及應用,以及對未來的規劃等。

企業中包含多種數據應用,從商業智能、批處理到機器學習,數據增長快速、數據結構複雜的特徵越來越明顯。在應用集成上,需要也越來越多,包括支持SQL的標準語法、JDBC和ODBC接口、靈活的動態查詢、OLAP分析等。

針對當前大數據領域分析場景需求各異而導致的存儲冗餘問題,CarbonData提供了一種新的融合數據存儲方案,以一份數據同時支持支持快速過濾查找和各種大數據離線分析和實時分析,並通過多級索引、字典編碼、預聚合、動態Partition、實時數據查詢等特性提升了IO掃描和計算性能,實現萬億數據分析秒級響應。蔡強在演講中對CarbonData的設計思路做了詳細講解。

在數據統一存儲上 :通過數據共享減少孤島和冗餘,支持多種業務場景以產生更大價值。

大集群 :區別於以往的單機系統,用戶希望新的大數據存儲方案能應對日益增多的數據,隨時可以通過增加資源的方式橫向擴展,無限擴容。

易集成 :提供標準接口,新的大數據方案與企業已採購的 工具 和IT系統要能無縫集成,支撐老業務快速遷移。另外要與大數據生態中的各種軟件能無縫集成。

高性能 :計算與存儲分離,支持從GB到PB大規模數據, 十萬億數據秒級響應 。

開放生態 :與大數據生態無縫集成,充分 利用雲存儲和Hadoop集群 的優勢。

數據佈局如下圖,CarbonData用一個HDFS文件構成一個Block,包含若干Blocklet作為文件內的列存數據塊,File Header/Fille Footer提供元數據信息,內置Blocklet索引以及Blocklet級和Page級的統計信息,壓縮編碼採用RLE、自適應編碼、Snappy/Zstd壓縮,數據類型支持所有基礎和複雜類型:

Spark、Flink、CarbonData技術實踐最佳案例解析

Carbon表支持索引,支持Segment級(注:一個批次數據導入為一個segment)的讀寫和數據靈活管理,如按segment進行數據老化和查詢等,文件佈局如下:

Spark、Flink、CarbonData技術實踐最佳案例解析

Spark Driver將集中式的索引存在內存中,根據索引快速過濾數據,Hive metastore存儲表的元數據(表的信息等)。

一次Load/Insert對應生成一個Segment, 一個Segment包含多個Shard, 一個Shard就是一臺機器上導入的多個數據文件和一個索引文件組成。每個Segment 包含數據和元數據(CarbonData File和Index文件),不同的Segment可以有不同的文件格式,支持更多其他格式(CSV, Parquet),採用增量的數據管理方式,處理比分區管理的速度快很多。

查詢時會將filter和projection下推到DataMap(數據地圖)。它的執行模型如下:

Spark、Flink、CarbonData技術實踐最佳案例解析

主要包括Index DataMap和MV DataMap兩種不同DataMap,三級Index索引架構減少了Spark Task數和磁盤IO,MV可以進行預匯聚和join的操作,用數據入庫時間換取查詢時間。

DataMap根據實際數據量大小選擇集中式或者分佈式存儲,以避免大內存問題。

DataMap支持內存或磁盤的存儲方式。

最後,蔡強也分析了CarbonData的具體使用和未來計劃。

在使用上,CarbonData提供了非常豐富的功能特性, 用戶 可 權衡 入庫時間、索引粒度和查詢性能,增量入庫等方面來靈活設置。 表操作 與SparkSQL深度集成,支持高檢測功能的可配置Table Properties。語法和API保持SparkSQL一致,支持併發導入、更新、合併和查詢。 DataMap 類似一張視圖表,可用於加 速Carbon表查詢,通過datamap_provider支持Bloomfilter、Pre-aggregate、MV三種類型的地圖。 流式入庫 與Structured Streaming 集成,實現準實時分析。支持同時查詢實時數據和歷史數據,支持預聚合並自動刷新,聚合查詢會先檢查聚合操作,從而取得數據返回客戶端。 準實時查詢, 提供了Stream SQL標準接口,建立臨時的Source表和Sink表。支持類似Structured Streaming(結構化流)的邏輯語句和調度作業。

CarbonData從2016年進入孵化器到2017年畢業,一共發佈了10多個穩定的版本,今年9月份將會迎來1.5.0版的發佈。1.5.0將支持Spark File Format,增強對S3上數據的支持,支持Spark2.3和Hadoop3.1以及複雜類型的支持。而1.5.1主要會對MV支持增量的加載,增強對DataMap的選擇,以及增強了對Presto的支持。

更多信息,可以參考在線的文檔:

官網

代碼

JIRA

提問

Flink在美團的實踐與應用 (講師PPT下載)

美團點評數據平臺的高級工程師孫夢瑤介紹了美團的實時平臺架構及當前痛點,帶來了美團如何在Flink上的實踐以及如何打造實時數據平臺,最後介紹了實時指標聚合系統和機器學習平臺是如何利用Flink進行賦能。

孫夢瑤首先介紹了美團目前實時計算平臺的架構:

Spark、Flink、CarbonData技術實踐最佳案例解析

首先,在數據緩存層,Kafka作為最大的數據中轉層(所有日誌類的數據),支撐了美團線上的大量業務,包括離線拉取,以及部分實時處理業務等。其次, 引擎層 由計算引擎和存儲引擎來支撐,計算引擎由Storm和Flink混合使用,存儲引擎則提供實時存儲功能。接著, 平臺層 為數據開發提供支持,為美團的日誌中心、機器學習中心、實時指標聚合平臺提供支撐。架構最頂層的 數據應用層 就是由實時計算平臺支撐的業務。

目前,美團實時計算平臺的作業量已達到近萬,集群的節點的規模達到千級別,天級消息量已經達到了萬億級,高峰期的秒級消息量則高達千萬條。但是,隨著業務的快速擴增,美團點評在實時計算層面仍面臨著一系列的痛點及問題:

一是實時計算 精確性 問題:由於Storm的At-Least-Once特性導致數據重複,而滿足Exactly-Once的Trident無法保證某些業務的毫秒級延遲要求。

二是流處理中的 狀態管理 問題:基於Storm的流處理的狀態如果管理不好,會引起故障難以恢復的尷尬狀況。

三是實時計算 表義能力 的侷限性:基於對實時計算場景的業務需求,發現之前的系統在表義能力方面有一定的限制。

四是開發調試 成本 高:不同生態的手工代碼開發,導致後續開發、調試、維護成本的增加。

在這樣的的背景下,美團點評基礎數據團隊也開始引入Flink並探索相對應的創新實踐之路。Flink在美團點評的實踐主要包括三大維度:一是穩定性實踐,二是Flink的平臺化,三是生態建設:

穩定性實踐層面, 美團點評首先按不同的業務(取決於不同的高峰期、運維時間、可靠性、延遲要求、應用場景等)進行對應的 資源隔離 ,隔離策略是通過YARN在物理節點上打標籤和隔離離線DataNode與實時計算節點。

其次,再實施基於CPU、基於內存的 智能調度 ,目前方案是從CPU和內存兩個方面進行調度優化。還包括對Flink的JobManager部署HA(High Availability),保證 節點的高可用性 。針對網絡連接故障,採用自動拉起的方式,通過checkpoint恢復失敗的作業。

此外,針對Flink對Kafka 08的讀寫超時,美團點評會根據用戶的指定次數對異常進行 重試 ,這種方式在解決大規模集群的節點故障問題時可以做更好的平衡。在容災方面,其採用了 多機房 和各種 熱備 提升系統的抗故障能力,即使斷電斷網也能進行保證作業繼續進行數據處理。

Flink平臺化層面, 通過內部的 作業管理 的實時計算平臺,其團隊可以看到總覽的作業狀態,以及資源運行和佔用情況。針對實時作業中可能出現的狀態,比如延遲、失敗,提供 監控報警並能便捷地進行消息預訂(電話,郵件,短信等方式)。針對顯著的性能差別,也提供了 調優診斷 的手段進行自助查詢、對比、診斷。

Spark、Flink、CarbonData技術實踐最佳案例解析

接下來,孫夢瑤還主要講解了Flink在美團的應用,其中主要包括兩點:一是在 Petra實時指標 聚合 系統的應用 ,二是 用於MLX機器學習平臺的構建 。

Petra實時指標 聚合 系統 主要完成對美團業務系統指標的聚合和展示。它對應的場景是整合多個上游系統的業務維度和指標,確保低延遲、同步時效性及可配置。因此美團點評團隊充分利用了Flink基於事件時間和聚合的良好支持、Flink在精確率(checkpoint機制)和低延遲上的特性,以及熱點key散列解決了維度計算中的數據傾斜問題。

Spark、Flink、CarbonData技術實踐最佳案例解析

MLX機器學習平臺

Spark、Flink、CarbonData技術實踐最佳案例解析

MLX機器學習平臺主要通過特徵數據的提取和模型的訓練,支持美團點評的搜索和推薦以及其他業務的應用。它需要滿足提供離線模式——通過批處理抽取離線特徵數據,同時也提供近線模式——通過Flink抽取實時日誌系統中的特徵數據。接著訓練綜合了離線和近線數據的特徵數據集群,提取特徵並進行模型訓練,最終產生有意義的特徵。目前,它能支持現有離線場景下的特徵提取體系,通過Flink支持增量在線日誌交易類數據,有了離線和在線數據就能較好的支持模型訓練、特徵提取、在線預估、實時預測等。

未來,美團點評還將從三方面優化Flink相關實踐:

狀態的統一方面: 對狀態進行統一的管理以及大狀態性能優化。

SQL開發效率的提升: 基於Flink在語義上的優勢解決配置、查詢方面的問題,在性能、開發、維護方面做進一步優化。

新應用場景的探索: 除流處理外,進一步整合業務場景下離線和在線數據,通過統一的API為業務提供更多的服務。

Flink和Spark流框架對比 + 華為流計算技術演進 (講師PPT下載)

華為雲技術專家時金魁作為最後一位演講嘉賓,系統性地梳理、比較了Flink/Spark的流框架,同時介紹了華為流計算技術演進過程,並詳解了華為CloudStream的服務能力及應用。

時金魁一開始即列舉了最常用的流計算框架Storm、Nifi、Spark和Flink等。提供了下面常見開源流計算框架以便大家瞭解這個生態圈的最新情況。

Spark、Flink、CarbonData技術實踐最佳案例解析

其中,華為雲CloudStream同時支持Flink和Spark(Streaming和Structured Streaming)。時金魁提到,華為流計算團隊在研發過程中發現,Spark Streaming能力有限,無法完全滿足實時流計算場景,而華為自研多年的流框架生態不足,Storm日薄西山,所以華為在2016年轉向Flink為主Spark為輔的組合。今年Spark Structured能力越來越豐富,與Flink之間的gap正快速縮小,也是幸事。

時金魁認為,流計算就是實時處理當下正在發生的流數據,逐條進行大數據分析或算法運算。它具備以下幾個特徵:

數據先後順序不確定導致的 亂序 問題。

內存 計算。

流速不定 (數據大小不能預測), 數據傾斜 (分佈不均勻),導致計算資源分配不均,能力受限。

Long running 永遠不結束。

基於消息事件的逐條處理。

提供可靠的快照。

從新技術、用戶耐心、大數據增長几個方面,時金魁介紹了實時流計算最大限度挖掘數據的價值,是商業驅動和市場價值的一種體現。實時流計算具有豐富的使用場景,如實時商品的廣告推薦、金融風控、交通物流、車聯網、智慧城市等等。只要需要對實時的大數據推薦或者實時大數據分析,都能找到流計算的應用價值。

時金魁在演講中重點講解了數據流模型,即它是一個實時往下流的過程。在Flink中,客觀的理解就是一個無限的數據流,提供分配和合並,並提供觸發器和增量處理機制。如下圖所示:

Spark、Flink、CarbonData技術實踐最佳案例解析

時金魁介紹說,對華為而言,Spark,Flink以及CloudStream,這三部分構成了LOGO中的“三條槓”,華為實時流計算服務俗稱“華為雲三道槓”,為客戶主要提供雲計算的服務。

通過對Flink的內核分析以及運行分析,他解釋瞭如何實現一個完整的數據流處理過程:

Spark、Flink、CarbonData技術實踐最佳案例解析

解析 :邏輯關係解析,生成StreamTransformation

分析 :構建StreamGraph,DAG,為生成執行計劃準備

生成 :構建ExecutionGraph,為運行做準備

執行 :申請資源,執行計劃(算子)

最後生成數據流(DataStream)

下圖是Flink的技術棧圖,包括了一個完整的數據流框架:

Spark、Flink、CarbonData技術實踐最佳案例解析

此外,時金魁還對Flink和Spark做了詳細的對比。 Flink 的優勢包括具備成熟的數據流模型,能提供大量易用的API供使用,在SQL、Table、CEP、ML、Graph方面都提供完善的功能。對比之下,Spark 擁有活躍的社區和完善的生態,Structured Streaming能提供統一標準,保證低延遲。

而華為根據Flink與Spark框架各自的特點,摒棄其劣勢,設計開發出一款全新的實時流計算服務Cloud Stream Service(簡稱CS)。CS採用Apache Flink的Dataflow模型,實現完全的實時計算,同時採用在線SQL編輯平臺編寫的Stream SQL,自定義數據流入、數據處理、數據流出,並完全兼容Spark和Flink的API。

Spark、Flink、CarbonData技術實踐最佳案例解析

總結來說,Cloud Stream具有易用、按需計費、開箱即用、低延時(毫秒)高吞吐(百萬消息每秒)、完整生態、完全可靠等幾大優勢。

例如,在易用性維度,Cloud Stream利用可視化的StreamSQL編輯器,因此可以方便地定義SQL,可在線調試和監控作業。

在安全性維度,華為實時流計算團隊在行業首創了全託管的serverless獨享集群模式。第一,它採用物理隔離,使得用戶在作業運行時和資源上無共享,多用戶之間無交叉;二是在業務上實現隔離,使得連接、數據和計算相互獨立無干擾;三是沙箱在共享資源池中很難完全防語言、應用、OS等方面的共計,而且對Spark和Flink有一定的侵入性。

在線機器學習方面,CloudStream通過了流式隨機森林算法應用於實時故障檢測;通過特徵工程應用於實時推薦;通過在線機器學習應用於智慧城市;通過地理分析函數應用於卡車運輸位置檢測。

最後,時金魁也分享了CloudStream支持對接用戶自己搭建的Kafka、Hadoop、Elastic Search、RabbitMQ等開源產品集群;同時已支持連通華為雲上的其他服務,如消息通知服務、雲搜索服務、智能邊緣平臺等十幾個服務,從而為用戶提供一站式、生態豐富、功能強大的實時流計算平臺。


分享到:


相關文章: