1. 程式人生 > >[Spark]-結構化流之初始篇

[Spark]-結構化流之初始篇

dataframe gre 延遲 需要 狀態 一次 結構化 問題 查點

1.什麽是結構化流.

  結構化流(Structured Streaming),是一種基於Spark-SQL引擎構建的,可容錯的,可擴展的流處理引擎.

  它以微批量計算的形式來表達流式計算,隨著流式數據持續到達,它能持續的進行處理並更新最終計算結果.

  它使用Spark-SQL帶來的豐富的API,來表示流聚合(streaming aggregations),事件時間窗口( event-time windows),流到批處理連接(stream-to-batch joins)等,最終在同一個引擎(優化的Spark-SQL引擎)執行.

    並且,系統能以檢查點(CheckPoint)和預寫日誌(Write Ahead Logs),來確保端到端的(end-to-end)有且僅有一次(exactly-once)的容錯保證.

  它的微批處理機制,可以將端到端的延遲降低到100毫秒以下,而在2.3版本中,新提供了一種連續處理(Continuous Processing)機制,將這種端到端的延遲進一步降低到1毫秒以內

  簡單來說,結構化流提供一種快速的,可容錯的,可擴展的,端到端有且僅有一次保證的流式處理方案

2.結構化流與流式處理(Streaming)

  結構化流是Spark2.X時代提出的新一代流式計算框架.

  它相當於Streaming的增強版,從就舊的來說,它可以完全覆蓋Streaming的功能,從新的來說,它還具有以下的演進:

    Streaming是按時間分片為DStream,這導致Streaming很難基於event-time,來處理數據延時,甚至數據亂序的情況.而結果化流是視為一個無界DataFrame,輸出結果映射為另一張表.天然支持亂序情況.

    流式(使用RDD)和批處理(使用Spark-SQL)API不能保持完全兼容,程序代碼需要做一些轉換才行

    端到端的保障機制由用戶維護,難以處理增量更新和持久化存儲一致的問題

3.編程模型

  3.1 基本概念

    結構化流的核心思想是時間分片,是將實時數據流,視為一個不斷增加(append)的表.這讓它與普通的批處理非常類似

    但是,結構化流不實現整個表.它讀取最新的可用數據流數據來源,處理結果逐步更新,然後丟棄的源數據.只保持在所需的最少的中間狀態的數據更新結果

  3.2 基於事件時間處理數據延遲

    因為時間分片的機制,時間屬性就是一個非常重要的屬性.結構化流支持基於事件時間(Event-time)來處理.

    事件時間是嵌入在數據本身中.很多的時候,都需要基於事件時間而不是結構化流接受時間來處理.比如某些情況下,一部分數據到達出現延遲

  3.3 容錯機制

[Spark]-結構化流之初始篇