目錄
-
整體流程
Spark Streaming中,會有一個接收器組件Receiver,作爲一個長期運行的task跑在一個Executor上。Receiver接收外部的數據流形成input DStream
DStream會被按照時間間隔劃分成一批一批的RDD,當批處理間隔縮短到秒級時,便可以用於處理實時數據流。時間間隔的大小可以由參數指定,一般設在500毫秒到幾秒之間。
對DStream進行操作就是對RDD進行操作,計算處理的結果可以傳給外部系統。
Spark Streaming的工作流程像下面的圖所示一樣,接收到實時數據後,給數據分批次,然後傳給Spark Engine(引擎)處理最後生成該批次的結果。
-
數據抽象
Spark Streaming的基礎抽象是DStream(Discretized Stream),離散化數據流,連續不斷的數據流),代表持續性的數據流和經過各種Spark算子操作後的結果數據流
DStream本質上就是一系列時間上連續的RDD
對DStream的數據的進行操作也是按照RDD爲單位來進行的
容錯性
底層RDD之間存在依賴關係,DStream直接也有依賴關係,RDD具有容錯性,那麼DStream也具有容錯性,如下,每一個橢圓形表示一個RDD,橢圓形中的每個圓形代表一個RDD中的一個Partition分區,每一列的多個RDD表示一個DStream(圖中有三列所以有三個DStream),每一行最後一個RDD則表示每一個Batch Size所產生的中間結果RDD
準實時性/近實時性
Spark Streaming將流式計算分解成多個Spark Job,對於每一時間段數據的處理都會經過Spark DAG圖分解以及Spark的任務集的調度過程。對於目前版本的Spark Streaming而言,其最小的Batch Size的選取在0.5~5秒鐘之間。所以Spark Streaming能夠滿足流式準實時計算場景,對實時性要求非常高的如高頻實時交易場景則不太適合
-
總結
簡單來說DStream就是對RDD的封裝,你對DStream進行操作,就是對RDD進行操作,對於DataFrame/DataSet/DStream來說本質上都可以理解成RDD