(03)Flink 程式設計介面

KK架構師發表於2020-12-06

1 資料集型別

現實世界中,所有的資料都是以流式的形態產生的,不管是哪裡產生的資料,在產生的過程中都是一條條地生成,最後經過了儲存和轉換處理,形成了各種型別的資料集。

根據現實世界中,資料產生方式和資料產生是否含有邊界(具有起始點和終止點)角度,將資料分為兩種型別的資料集,一種是有界資料集,另外一種是無界資料集。

(1)有界資料集

有界資料具有時間邊界,在處理過程中資料一定會在某個時間範圍內起始和結束,有可能是一分鐘,也有可能是一天內的交易資料。

對有界資料集的資料處理方式被稱為批計算,例如將資料從 RDBMS 或檔案系統中讀取出來,然後在分散式系統內處理,最後再將處理結果寫入儲存介質中,整個過程就被稱為批處理。

(2)無界資料集

資料從開始生成就一直持續不斷地產生新的資料,因此資料是沒有邊界的,例如伺服器的日誌,感測器訊號等。

和批量資料處理方式對應,對無界資料集的處理方式被稱為流式處理(Stream Process)。

可以看出,流式資料處理過程實現複雜度會更高,因為需要考慮處理過程中資料的順序錯亂,以及系統容錯方面的問題。

(3)統一資料處理

有界資料集和無界資料集只是一個相對的概念,主要根據時間的範圍而定,可以認為一段時間內的無界資料集其實就是有界資料集,同時有界資料也可以通過一些方法轉換成無界資料集。

例如系統一年的訂單交易系統,其本質上應該是有界的資料集,可是當我們把它一條一條按照產生的順序傳送到流式系統,通過流式系統對資料進行處理,在這種情況下可以認為資料是相對無界的。

對於無界資料也可以拆分成有界資料進行處理,例如將系統產生的資料接入到儲存系統,按照年或月進行切割,切分成不同時間長度的有界資料集,然後就可以通過批處理方式對資料進行處理。

從以上,我們可以得出一個結論:有界資料和無界資料其實是可以相互轉換的。

目前業界比較熟知的開源大資料處理框架中,能夠同時支援流式計算和批量計算,比較典型的代表為 Apache Spark 和 Apacke Flink 兩套框架。

Spark 是通過批處理模式來統一處理不同型別的資料集,對於流資料是將資料按照批次切分成微批(有界資料集)來進行處理。

Flink 用比較符合資料產生的規律方式處理流式資料,對於有界資料可以轉換成無界資料統一處理,最終將批處理和流處理統一在一套流式引擎中。

說完了資料集型別之後,我們來看看 Flink 提供了哪些程式設計介面來處理資料。

2 Flink 程式設計介面

Flink 根據資料集型別的不同將核心資料處理介面分為兩大類,一類是 批計算介面 DataSet API,一類是支援流式計算的介面 DataStream API。

同時 Flink 將資料處理介面抽象成四層,由上而下分別為 SQL API,Table API,DataStream/DataSet API,以及 StateFul Stream Processing API

(1)Flink SQL

Flink 提供了統一的 SQL API 完成對批計算和流計算的處理,SQL語言具有比較低的學習成本,能夠讓資料分析人員和開發人員快速的上手

(2)Table API

Table API 將記憶體中的 DataStream 和 DataSet 資料集在原有的基礎之上增加 Schema 資訊,將資料型別統一抽象成表結構,然後通過 Table API 提供的介面處理對應的資料集。

SQL API 可以直接查詢 Table API 中登錄檔中的資料表。

Table API 構建在 DataStream 和 DataSet 之上的同時,提供了大量面向領域語言的程式設計介面,例如 GroupByKey,Join 等操作符,提供給使用者一種更加友好的處理資料集的方式。

同時 Table API 在轉換為DataStream 和 DataSet 的資料處理過程中,也應用了大量的優化規則對處理邏輯進行了優化。

(3)DataStream API 和 DataSet API

DataStream API 處理流式資料,DataSet API 處理批量資料,使用者 可以使用 map,filter,join,aggregation,window 等方法,同時每種介面都支援了 Java、Scala 及 Python 多種語言

(4)Stateful Stream Process API

這個 Api 是Flink 中處理 Stateful Stream 最底層的介面,使用者可以通過這個 api 介面操作狀態、時間等底層資料。

使用 Stateful Stream Process API 介面開發應用靈活性非常強,可以實現非常複雜的流式計算邏輯,但是相對使用者使用成本也比較高,一般企業使用Flink 進行二次開發或深度封裝的時候會用到這層介面。
在這裡插入圖片描述

相關文章