flink提供了流計算和批計算,對應的api分別數dataStream api和dataSet api,下面我們從源碼層面對dataStream進行簡單分析。
DataStream數據結構:
DataStream表示相同類型的元素流。一個DataStream可以通過應用轉換爲另一個DataStream。DataStream包含StreamExecutionEnvironment上下文和Transformation,Transformation表示創建datastream的操作。
DataStream方法:
DataStream類結構:
DataStream數據流
datastream是流處理的api,既然是流處理,就必須有獲取數據,處理數據,轉換爲另一個DataStream的操作,最後還應該有數據持久化的操作。
flink中獲取數據的接口是:org.apache.flink.api.common.io.InputFormat
數據處理的接口是: org.apache.flink.api.common.operators.Operator
數據持久化的接口是:org.apache.flink.api.common.io.OutputFormat
我們的使命是探究DataStream和InputFormat,Operator,OutputFormat 之間的關係。
InputFormat:
InputFormat is The base interface for data sources that produces records.
InputFormat處理以下問題:
1. 它描述瞭如何將輸入分割成可並行處理的分塊
2. 它描述瞭如何從輸入分割中讀取記錄
3. 它描述瞭如何從輸入中收集基本的統計信息。
InputFormat的生命週期如下:
1. 被Configuration配置初始化,基礎域從Configuration中讀取
2.可選:編譯器調用它來生成關於輸入的基本統計信息
3.調用它來創建輸入分割
4.每個並行InputFormat任務創建一個實例,配置它,併爲特定的分割打開它
5.從InputFormat讀取所有記錄
6.關閉InputFormat
InputFormat集成結構
Operator:
批處理的基類是org.apache.flink.api.common.operators.Operator
而流處理的基類是org.apache.flink.streaming.api.operators.StreamOperator
,從這感覺批處理纔是嫡系,流處理是自定義基類。我們這次關心流處理,所以後面在討論stream api時候討論StreamOperator.
OutputFormat:
用於消耗記錄的輸出的基本接口。outputFormat描述如何存儲最終記錄,例如在文件中。生命週期如下:
1.configure()可用於實現初始化時可能附加的參數(配置)
2.每個並行輸出任務創建一個實例,配置它並打開它
3.並行實例的所有記錄都被傳遞到outputFormat
4.關閉outputFormat。