我們知道,Flink是一個分層架構的系統,每一層所包含的組件都提供了特定的抽象,用來服務於上層組件。Flink分層的組件棧如下圖所示:
掌握了Flink的分層架構,後面的學習就可以圍繞每個層級的核心內容來學習或研究。
Flink一共分為四個層級,具體如下圖所示:
Flink 最下面的一層API為Stateful Stream Processing,它是Flink最底層的API,控制更靈活但一般很少使用。然後上面一層就是Flink Core(核心)API,它包含DataStream和DataSet API,應用層的用戶經常使用 Core API。然後再上面一層就是 Table API,它相當於在Core API中可以定義數據的Table結構,可以做table操作。最上面一層就是SQL 操作,用戶可以直接使用SQL語句對數據處理,更簡單更方便。
注意:越底層的API越靈活,但越複雜。越上層的API越輕便,但靈活性差。
1. Stateful Stream Processing
a)它位於最底層,是Core API 的底層實現。
b)它是嵌入到Stream流裡面的處理函數(processFunction)。
c)當Core API滿足不了用戶需求,可以利用低階API構建一些新的組件或者算子。
d)它雖然靈活性高,但開發比較複雜,需要具備一定的編碼能力。
2. Core API
a) DataSet API 是批處理API,處理有限的數據集。
b) DataStream API是流處理API,處理無限的數據集。
3. Table API & SQL
a)SQL 構建在Table 之上,都需要構建Table 環境。
b)不同的類型的Table 構建不同的Table 環境中。
c)Table 可以與DataStream或者DataSet進行相互轉換。
d)Streaming SQL不同於存儲的SQL,最終會轉化為流式執行計劃。