實時計算框架特點及對比:Flink、Spark Streaming、Storm
隨著網際網路和大資料技術的發展,實時計算框架也在推陳出新,向著高吞吐、高可用、低延遲準實時的方向發展。具體而言,主流的計算引擎不外乎三個:Flink、Spark Streaming、Storm。本文從幾個方面總結了各框架的優缺點,希望對讀者進行架構設計和技術選型提供幫助。
各框架對比
1、設計理念
Flink
Flink是事件驅動的實時計算框架,是一個針對流資料和批資料的分散式處理引擎。它認為批是流的特例,資料流分為有限流(Bounded)和無限流(Unbounded),離線計算是對有限資料流的批處理,實時計算是對無限資料流的連續處理。有限流是有明確的開始和結束時間,無限流有明確的開始時間但沒有結束時間。Flink是基於事件驅動,內部是對訊息逐條emit。
同時,Flink 主要是由 Java 程式碼實現,其所要處理的主要場景就是流資料,批資料只是流資料的一個極限特例而已。
換句話說,Flink 會把所有任務當成流來處理,這也是其最大的特點。Flink 可以支援本地的快速迭代,以及一些環形的迭代任務。並且 Flink 可以定製化記憶體管理。在這點,如果要對比 Flink 和 Spark 的話,Flink 並沒有將記憶體完全交給應用層。這也是為什麼 Spark 相對於 Flink,更容易出現 OOM 的原因(out of memory)。就框架本身與應用場景來說,Flink 更相似於 Storm。
Spark Streaming
Spark Streaming是在 Spark Core API基礎上擴充套件出來的,以微批模式實現的近實時計算框架,它認為流是批的特例,將輸入資料切分成一個個小的切片,利用Spark引擎作為一個個小的batch資料來處理,最終輸出切片流,以此實現近似實時計算。
Spark Streaming並不會像Storm那樣一次一個地處理資料流,而是在處理前按時間間隔預先將其切分為一段一段的批處理作業。Spark針對持續性資料流的抽象稱為DStream(DiscretizedStream),一個DStream是一個微批處理(micro-batching)的RDD(彈性分散式資料集);而RDD則是一種分散式資料集,能夠以兩種方式並行運作,分別是任意函式和滑動視窗資料的轉換
Storm
Storm也是一個事件驅動的實時流計算框架,完全由開發者自己定義訊息被處理的拓撲結構(Topology)。換言之,在Storm中,先要設計一個用於實時計算的圖狀結構,我們稱之為拓撲(topology),它的結構和Mapreduce任務類似,透過自定定義Spout(資料輸入處理模組)和Bolt(輸出處理模組)邏輯,以及自定義Bolt之間的拓撲依賴關係,完成整個實時事件流的處理邏輯搭建。
期間,Topology這個拓撲將會被提交給叢集,由叢集中的主控節點(master node)分發程式碼,將任務分配給工作節點(worker node)執行。一個拓撲中包括spout和bolt兩種角色,其中spout傳送訊息,負責將資料流以tuple元組的形式傳送出去;而bolt則負責轉換這些資料流,在bolt中可以完成計算、過濾等操作,bolt自身也可以隨機將資料傳送給其他bolt。由spout發射出的tuple是不可變陣列,對應著固定的鍵值對。
Trident是在Storm核心API基礎上更高層次的抽象,以微批的方式處理實時流,增加了視窗操作、聚合操作等,並且支援Exactly once。
2、基礎架構
Flink
Flink 資料模型是基於流(Streams)和轉換(Transformations),由一個或多個 Source作為輸入,並終止於一個或多個 Sink,透過不同的轉換運算元對資料流進行處理。
JobManager:協調分散式任務執行、排程、協調 checkpoints、協調故障恢復等。高可用情況下可以啟動多個 JobManager,其中一個選舉為 leader,其餘為 standby
TaskManager:負責執行具體的task、快取、交換資料流
Slot:每個 task slot 代表 TaskManager 的一個固定資源,Slot 的個數代表著 TaskManager 可並行執行的 task 數。
對於 Flink 任務客戶端首先會生成 StreamGraph,然後生成 JobGraph,將 JobGraph 提交給 JobManager 由它完成 JobGraph 到 ExecutionGraph 的轉換,最後由 JobManager 排程執行。
Spark Streaming
Spark Streaming整體架構和Spark一致,角色主要有:
Master:負責叢集資源管理和應用程式排程
Worker:負責單個節點的資源管理,driver 和 executor 的啟動等
Driver:程式執行入口,初始化SparkContext,負責生成DAG 、劃分stage、生成排程task;
Executor:負責執行 task,反饋執行狀態和執行結果
對於輸入的每個批次都是一個Spark Core任務,Spark Streaming每個批次執行的拓撲結構不固定,會根據資料本地性和資源情況進行排程。
Storm
Nimbus:master節點,負責提交任務,分配到supervisor的worker上
Supervisor:slave節點,負責管理執行在supervisor節點上的worker程式,worker負責執行Topology上的Spout/Bolt任務
總結
Flink目前已經被各大網際網路公司廣泛使用,已經成為業界事實標準。Spark Streaming 在高吞吐複雜計算場景仍具優勢。Storm 是最早流行的實時計算框架,但由於開發維護較複雜,功能簡單,後逐漸被取代,新版本也增加了對事件時間、watermark、視窗計算的支援,成熟度和易用性還不足。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547898/viewspace-2932498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Apache 流框架 Flink,Spark Streaming,Storm對比分析(2)Apache框架SparkORM
- Apache 流框架 Flink,Spark Streaming,Storm對比分析(1)Apache框架SparkORM
- Apache 流框架 Flink,Spark Streaming,Storm對比分析(一)Apache框架SparkORM
- Apache 流框架 Flink,Spark Streaming,Storm對比分析(二)Apache框架SparkORM
- 流計算框架 Flink 與 Storm 的效能對比框架ORM
- 大資料框架對比 - Hadoop、Spark、Storm、Samza、Spark、Flink大資料框架HadoopSparkORM
- Storm與Spark Streaming比較ORMSpark
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何選擇流處理框架SparkORMKafka框架
- Spark Streaming——Spark第一代實時計算引擎Spark
- Kafka+Spark Streaming+Redis實時計算整合實踐KafkaSparkRedis
- Spark Streaming VS FlinkSpark
- 從Storm到Flink,有贊五年實時計算效率提升實踐ORM
- JStorm-Alibaba——Storm的實時流式計算框架JSORM框架
- Spark 以及 spark streaming 核心原理及實踐Spark
- Spark Streaming高階特性在NDCG計算實踐Spark
- storm實時計算例項(socket實時接入)ORM
- Spark Streaming和Flink的區別Spark
- 大資料“重磅炸彈”:實時計算框架 Flink大資料框架
- Hadoop Storm Spark比較HadoopORMSpark
- 實時計算框架:Spark叢集搭建與入門案例框架Spark
- Spark 實時計算整合案例Spark
- 簡單介紹SpringSecurity框架簡介及與shiro特點對比SpringGse框架
- 實時計算框架:Flink叢集搭建與執行機制框架
- Storm 實戰:構建大資料實時計算ORM大資料
- Flink實時計算topN熱榜
- 實時計算Flink——產品安全
- 實時計算Flink效能調優
- 《Storm分散式實時計算模式》——1.7總結ORM分散式模式
- Apache流計算框架詳細對比Apache框架
- hadoop&spark mapreduce對比 & 框架設計和理解HadoopSpark框架
- Flink 在有贊實時計算的實踐
- 用Spark進行實時流計算Spark
- 實時計算Flink——快速入門概述
- 雲端計算的關鍵特點及挑戰
- Spark Streaming + Spark SQL 實現配置化ETSparkSQL
- java計算時間差及比較時間Java
- 三個大資料處理框架:Storm,Spark和Samza介紹比較大資料框架ORMSpark
- Flink實戰(八) - Streaming Connectors 程式設計程式設計