【必讀】3分鐘帶你瞭解流式數據架構基本概念

1 流

流(streaming)是一種爲無界數據集設計的數據處理引擎,這種引擎具備以下特徵:

  • 具備強一致性,即支持exactly-once語義。
  • 提供豐富的時間工具,如事件時間、處理時間、窗口等。
  • 保證系統具有可彈性、伸縮性。
  • 同時保證高吞吐、低延遲與容錯。
  • 支持高級語義,如流式關係型API(SQL)、複雜事件處理(CEP)

2 時間

在無界數據處理中,主要有兩類時間概念:

  • 事件時間(Event Time):事件實際發生的時間。
  • 處理時間(Processing Time):事件被處理的時間。

在現實世界裏,事件時間和處理時間往往並不一致,兩者的偏差也因數據源特性、處理引擎、硬件差別而千差萬別,這種變化給處理引擎的設計帶來了不小的挑戰。

3 窗口

窗口是將(有界或無界)數據集拆分成一個個有限長度數據區間的機制,用於將事件按照時間或其他特徵分組分析。通常有三類窗口:

  • 滾動窗口(Tumbling Window)

    將時間拆分成固定長度。

  • 滑動窗口(Sliding Window)

    按照滑動步長將時間拆分成固定的長度。當滑動步長小於窗口長度時,相鄰窗口間會有重疊。

  • 會話窗口(Session Window)

    以活動時間間隔爲邊界,將一系列連續時間拆分到不同的會話中。會話窗口的長度是動態的。

4 水印

水印(watermark)是嵌入在事件時間軸上用於判斷事件時間窗口內所有數據均以到達引擎的一種時間推理工具,是一種既可以在流處理側嵌入,又可以在消息系統側嵌入的時間戳。

水印的語義是事件時間小於水印標記時間的事件不會再出現,在遇到水印後,會將事件時間小於水印時間的事件執行,因此水印是事件的推進器。

在這裏插入圖片描述

5 觸發器

觸發器(trigger)決定在窗口的什麼時間點啓動應用程序定義的數據處理任務。

水印遲到會拉長窗口生存週期,水印早到會導致數據處理結果不準確,觸發器就是爲了解決這兩個問題而被引入的。

6 數據處理模式

  • 有界數據處理

    通常使用批處理引擎處理有界數據集(儘管流處理引擎也具備這個功能)。

  • 無界數據批處理

    在流處理引擎沒有出現之前,業界通常使用窗口機制將無界數據集分割成一系列有界數據塊,使用批處理方式分析每個數據塊,即微批處理模式

  • 無界數據流式處理

    基於微批模式的無界數據批處理的原理是,將多個微批處理任務串接起來構建流式數據處理任務,這通常是以犧牲延遲和吞吐爲代價的。解決這個缺陷是流式處理引擎的發展目標之一,解決方案建立在分析無界數據集的無序和事件時間偏差特性的基礎上。

    • 無序意味着引擎需要時間處理機制
    • 事件時間偏差意味着引擎不能假定在某個時間窗口內能觀察到所有事件。

7 如何理解流式數據架構的內在機制

可以通過以下4個問題來深入理解流式數據處理的內在機制。

  • what:定義數據處理是什麼,即對數據進行怎樣的轉換操作,如Spark的算子。
  • where:定義轉換操作的輸入數據取自什麼時間區間,窗口是這個問題的答案。
  • when:定義轉換操作發生在時間軸的什麼時間點,水印和觸發器是這個問題的答案。
  • how:定義如何刻畫同一窗口內多次轉換操作結果的關係,累計模式是這個問題的答案。

參考資料:《深入理解Flink 實時大數據處理實踐》