流(streaming)是一種爲無界數據集設計的數據處理引擎,這種引擎具備以下特徵:
在無界數據處理中,主要有兩類時間概念:
在現實世界裏,事件時間和處理時間往往並不一致,兩者的偏差也因數據源特性、處理引擎、硬件差別而千差萬別,這種變化給處理引擎的設計帶來了不小的挑戰。
窗口是將(有界或無界)數據集拆分成一個個有限長度數據區間的機制,用於將事件按照時間或其他特徵分組分析。通常有三類窗口:
滾動窗口(Tumbling Window)
將時間拆分成固定長度。
滑動窗口(Sliding Window)
按照滑動步長將時間拆分成固定的長度。當滑動步長小於窗口長度時,相鄰窗口間會有重疊。
會話窗口(Session Window)
以活動時間間隔爲邊界,將一系列連續時間拆分到不同的會話中。會話窗口的長度是動態的。
水印(watermark)是嵌入在事件時間軸上用於判斷事件時間窗口內所有數據均以到達引擎的一種時間推理工具,是一種既可以在流處理側嵌入,又可以在消息系統側嵌入的時間戳。
水印的語義是事件時間小於水印標記時間的事件不會再出現,在遇到水印後,會將事件時間小於水印時間的事件執行,因此水印是事件的推進器。
觸發器(trigger)決定在窗口的什麼時間點啓動應用程序定義的數據處理任務。
水印遲到會拉長窗口生存週期,水印早到會導致數據處理結果不準確,觸發器就是爲了解決這兩個問題而被引入的。
有界數據處理
通常使用批處理引擎處理有界數據集(儘管流處理引擎也具備這個功能)。
無界數據批處理
在流處理引擎沒有出現之前,業界通常使用窗口機制將無界數據集分割成一系列有界數據塊,使用批處理方式分析每個數據塊,即微批處理模式
無界數據流式處理
基於微批模式的無界數據批處理的原理是,將多個微批處理任務串接起來構建流式數據處理任務,這通常是以犧牲延遲和吞吐爲代價的。解決這個缺陷是流式處理引擎的發展目標之一,解決方案建立在分析無界數據集的無序和事件時間偏差特性的基礎上。
可以通過以下4個問題來深入理解流式數據處理的內在機制。
參考資料:《深入理解Flink 實時大數據處理實踐》