一、StreamExecutionEnvironment:
StreamExecutionEnvironment是構建執行任務環境以及任務的啓動的入口,主要具有如下幾方面的職責:
a、存儲全局相關的參數,如執行環境配置ExecutionConfig、檢查點配置CheckpointConfig,任務的轉換算子transformations等等;
private final ExecutionConfig config = new ExecutionConfig();
執行環境的相關配置
private final CheckpointConfig checkpointCfg = new CheckpointConfig();
檢查點的相關配置
protected final List<Transformation<?>> transformations = new ArrayList<>();
transformations是轉換算子的集合,但不包含source,構建任務時進一步轉化爲DataStream。html
b、對外提供統一的建立ExecutionEnvironment入口,他提供了一些靜態方法,如getExecutionEnvironment方法;
補充一點,local模式啓動時,若是引入了flink-runtime-web指望使用web-UI時,能夠經過createLocalEnvironmentWithWebUI方法建立執行環境
StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
默認端口是8081或者經過Configuration指定,如不使用此方法建立,則每次啓動會隨機生成一個端口來使用。web
c、提供一些列的全局參數的配置/獲取入口,諸如set/get/enable等方法;
如設置並行度、檢查點、chain開關等等apache
d、若是把flink的流計算過程簡單理解爲數據輸入->轉換計算->數據輸出的三部曲的話,這裏做爲入口提供了關於數據輸入的一些列添加數據輸入的方法;
如formXXX集合系列、addSource數據源系列,socket/file系列等等。api
e、提供計算任務啓動執行的入口。
StreamExecutionEnvironment有兩個子類,分別是LocalStreamEnvironment和RemoteStreamEnvironment,LocalStreamEnvironment用於構建和執行基於本地jvm進程的計算任務,RemoteStreamEnvironment用於構建和提交基於遠端flink集羣的計算任務。jvm
二、DataStream
DataStream我的理解是流式數據處理的核心API,同時也是對轉換算子Transformation的進一步封裝,在持有某一個算子數據的同時也持有StreamExecutionEnvironment執行環境對象,按照操做的對象和類型能夠簡單劃分爲四大類:
a、對於單條數據的操做:如map、filter等操做
b、對於多條數據的操做:如keyBy、partition等操做
c、對多個流轉換合併爲1個流的操做:如union、connect等操做
d、對1個流拆分爲多個流的操做:如split操做
該類的集成體系以下圖所示,可自行理解對應到上面的分類,固然在org.apache.flink.streaming.api.datastream包下面還定義了一些其餘的Stream暫不在本次談論範圍之列:
socket
三、Transformation
Transform被定義爲了一個抽象類,在另外一篇分析https://www.cnblogs.com/wangwei0721/p/14012174.htmlStreamGraph生成過程當中有涉及,再看一次他的集成體系
一樣的,一方面能夠將算子轉換的分類與DataStream對算子的操做的分類對應起來,同時從另外一個維度來看,也能夠簡單的將Transformation劃分爲如下兩類:
a、繼承自PhysicalTransformation的一些服務算子轉換
在PhysicalTransformation抽象類中,定義了public abstract void setChainingStrategy(ChainingStrategy strategy);
模板方法,該方法要求其子類提供算子合併策略ChainingStrategy,該參數在後續計算優化算子合併時會用到。
ps:ChainingStrategy是一個枚舉類,有HEAD、NEVER和ALWAYS三個枚舉值,HEAD標識該算子僅做爲頭,不參與合併鏈,但支持後繼合併到本身,NEVER標識該算子既不向前合併也不被後繼合併,要做爲獨立節點處理,ALWAYS標識該算子的合併意願很強,支持隨時按規則合併。
在PhysicalTransformation的子類中,因爲該所有子類是支持執行物理轉換,意思是說該算子時必定產生數據輸入和輸出的,因此在所有子類中都Transformation做爲input同時持有一個StreamOperatorFactory對象,用於產生對應的StreamOperator未來做爲outPut;
b、其餘的邏輯算子轉換
其餘邏輯轉換算子則僅持有Transformation做爲input輸入以及一些其餘的屬性。優化
四、StreamOperator
StreamOperator是一個接口,標識了流計算的具體算子轉換對象接口,具有相關的生命週期、快照等行爲。code
五、把這四個類放一塊兒分析的緣由
研究下flink源碼,不難看出以上四個類能夠理解爲都是位於DataStream API層,他們承載了將用戶的輸入程序化構建爲DAG圖,將計算邏輯進行互相合理轉化,弄清楚他們的屬性和行爲對進一步分析flink源碼是頗有必要的。orm