(03)Flink 程式設計介面
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 進行二次開發或深度封裝的時候會用到這層介面。
相關文章
- 第03講:Flink 的程式設計模型與其他框架比較程式設計模型框架
- Flink程式設計套路程式設計
- Flink DataStream 程式設計入門AST程式設計
- Flink(1.11)高階程式設計——FlinkSQL程式設計SQL
- [03] C# Alloc Free程式設計C#程式設計
- 現代程式設計 homework-03程式設計
- 面向介面程式設計程式設計
- Flink實戰(八) - Streaming Connectors 程式設計程式設計
- Flink實戰(七) - Time & Windows程式設計Windows程式設計
- Rust 程式設計小專案:WebServer 03Rust程式設計WebServer
- 翻譯:《實用的Python程式設計》03_03_Error_checkingPython程式設計Error
- Flink實戰(六) - Table API & SQL程式設計APISQL程式設計
- 讀書筆記-Java程式設計思想-03筆記Java程式設計
- 以太坊的程式設計介面程式設計
- 面向介面的程式設計+MVC程式設計MVC
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- Python GUI介面程式設計-初識PythonGUI程式設計
- 03 shell程式設計之case語句與函式程式設計函式
- 如果今天沒有API介面,今天的程式設計師如何程式設計?API程式設計師
- API(Application Programming Interface,應用程式程式設計介面)APIAPP程式設計
- Java 併發程式設計之 Condition 介面Java程式設計
- Flink的狀態程式設計和容錯機制(四)程式設計
- 翻譯:《實用的Python程式設計》08_03_DebuggingPython程式設計
- 翻譯:《實用的Python程式設計》01_03_NumbersPython程式設計
- 翻譯:《實用的Python程式設計》03_01_ScriptPython程式設計
- 翻譯:《實用的Python程式設計》03_04_ModulesPython程式設計
- 【程式設計師介面百寶箱】免費常用API介面程式設計師API
- 【介面功能設計】TopThink介面功能設計建議
- go 模仿JAVA,面向介面/鏈式程式設計GoJava程式設計
- 值得收藏的TCP套介面程式設計文章TCP程式設計
- [MAUI程式設計]介面多型與實現UI程式設計多型
- 好程式設計師Java教程分享List介面程式設計師Java
- Java介面程式設計實戰(一)——簡易QQ登入介面Java程式設計
- 【介面錦囊】免費好用的API介面,程式設計師必看API程式設計師
- 翻譯:《實用的Python程式設計》06_03_Producers_consumersPython程式設計
- 翻譯:《實用的Python程式設計》04_03_Special_methodsPython程式設計
- 翻譯:《實用的Python程式設計》03_05_Main_modulePython程式設計AI
- 翻譯:《實用的Python程式設計》03_02_More_functionsPython程式設計Function