實時計算引擎——Spark-Streaming

Spark streaming簡介

spark streaming是spark體系中的一個流式處理框架。因此,Spark streaming相對於其他流式處理框架就更有優勢,用途更加廣泛,它能夠與spark sql、機器學習以及影象處理框架無縫連線。spark streaming還能夠從多種資料來源獲得資料,同時,能夠輸出到多種不同的資料平臺中,包括檔案系統、資料庫和實時資料展示平臺dashboards。spark streaming的流處理框架如下圖1所示:

實時計算引擎——Spark-Streaming

詳細的處理流程如下圖2所示,spark streaming接收實時資料流輸入的資料流後,再將其劃分為一個個batch(小批次資料流)供後續Spark engine處理,所以實際上,Spark Streaming是按一個個batch(小批次)來處理資料流的。

實時計算引擎——Spark-Streaming

spark streaming工作原理

spark streaming的大致工作流程如下:

首先,需要一個DAG的靜態模板來定義batch內的執行邏輯。

其次,如上圖2所示,針對實時的資料流來說, 還需要有控制器,不間斷地將資料流分成多個batch,同時在每個batch內部應用DAG靜態模板執行處理邏輯。

再次,要生成DStream,並不能像一般的資料來源那樣從儲存介質中去讀取,而是要從多種資料推送過來的資料,包括kafka、flume以及twitter等等。

最後,由於流式處理要不斷地迴圈執行,保障任務的穩定性就顯得尤其重要了。

因此,針對上述四種需要,spark streaming的整體執行流程就是圍繞上述四個需求而設定的,其總體工作流程如下圖所示。如圖中腳註,橙色部分顯示DAG的靜態定義部分,淡藍色為控制器部分,負責流的拆分,同時執行橙色部分定義的靜態模板。綠色部分顯示了driver和executor的資料接收部分,最後的紫色部分,顯示了spark streaming中很重要的穩定性保障功能,即checkpoint。

實時計算引擎——Spark-Streaming

Spark-Streaming 程式監控

官網中指出,spark中專門為SparkStreaming程式的監控設定了額外的途徑,當使用StreamingContext時,在WEB UI中會出現一個“Streaming”的選項卡,

實時計算引擎——Spark-Streaming

在此選項卡內,統計的內容展示如下:

實時計算引擎——Spark-Streaming

這其中包括接受的記錄數量,每一個batch內處理的記錄數,處理時間,以及總共消耗的時間。

在上述引數之中最重要的兩個引數分別是Porcessing Time 以及 Scheduling Delay

Porcessing Time 用來統計每個batch內處理資料所消費的時間

Scheduling Delay 用來統計在等待被處理所消費的時間

如果PT比SD大,或者SD持續上升,這就表明此係統不能對產生的資料實時響應,換句話來說就是,出現了處理時延,每個batch time 內的處理速度小於資料的產生速度。

在這種情況下,讀者需要想法減少資料的處理速度,即需要提升處理效率。