Flink 編程接口


歡迎來 kk大數據,今天分享的是 Flink 提供了哪些編程接口可以給我們開發。

 

一、數據集類型

 

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

 

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

 

(1)有界數據集

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

 

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

 

(2)無界數據集

數據從開始生成就一直持續不斷地產生新的數據,因此數據是沒有邊界的,例如服務器的日志,傳感器信號等。

 

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

 

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

 

(3)統一數據處理

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 

說完了數據集類型之后,我們來看看 Flink 提供了哪些編程接口來處理數據。

 

二、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 進行二次開發或深度封裝的時候會用到這層接口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM