Apache Flink® 入門介紹以及程式設計模型
阿新 • • 發佈:2019-02-05
在業餘時間經常來Flink官網查閱文件,零零散散的看不成系統,最近打算系統的做一下筆記。有官網主頁我們便知道Flink是什麼?
Apache Flink® is an open-source stream processing framework for distributed,
high-performing, always-available, and accurate data
streaming applications.
Flink是一個開源的分散式,高效能的,總是可用的,精確的流處理框架。
Introduction to Apache Flink®
下面是Flink和流處理的一個巨集觀概述,我們先看一下關於Flink的一個概念:
Dataflow Programming Model (資料流程式設計模型)
Levels of Abstraction(抽象層次)
flink支援不同層次的抽象開發流處理或批處理狀態流處理: 底層介面,構建處理的資料Block Core APIs:資料流/資料集的處理介面 Table API:宣告特定域指定語言 SQL:高層次的語言
Programs and Dataflows
Flink構建程式塊的基本方式就是使用streams和transformations(注意:DataSet在內部實現也是使用的streams的API)。通常在Flink程式中,一個tramsformation和一個dataflow的操作符是一一對應的,但是有時候一個transformation可能包含多個transformation。
Parallel Dataflows
Flink程式必定是並行分散式執行,執行期間,一個stream有一個或者多個stream分割槽,每一個操作符有一個分割槽或者operator subtasks,operator subtasks之間是相互獨立的,執行在不同的執行緒中,或者不同的機器上或者容器中。 operator subtasks的數量是該操作符的並行度。一個stream的並行度由產生該stream的運算元決定,同一個程式的不同操作符的並行度可能不同。One-to-one streams (for example between the Source and the map() operators in the figure above) preserve the partitioning and ordering of the elements.
Redistributing streams (as between map() and keyBy/window above, as well as between keyBy/window and Sink) change the partitioning of streams.
Windows
聚合事件在流上的處理不同於批處理。例如:由於流是無限的資料,因此就無法執行count計算所有元素個數,相反在count,sum運算元可以計算在視窗上,例如:計算前五分鐘或者計算上100個元素。 視窗大小可以有時間確定或者元素個數確定(例如上100個元素)。滑動視窗有:滾動視窗(沒有重疊),滑動視窗(有重疊),和會話視窗(punctuated by a gap of inactivity).Time
當在streaming程式中提time一般指的是如下不同概念: Event Time :時間時間一般是指時間建立的時間,通常由一個時間戳描述事件,Flink訪問時間戳可以通過Ingestion time:攝入時間,一般是指一個時間進入Flink dataflow的源操作符時間
Processing Time :處理時間是本地時間,每一個操作符基於時間操作執行的時間
More details on how to handle time are in the event time docs.
Stateful Operations
然而許多操作在dataflow看起來只是一個事件,但是有些操作需要記住多個事件的資訊,這些操作我們稱為有狀態的。 有狀態的操作的狀態我們可以認為是儲存在一個key/value的容器中。這些狀態和讀取狀態的操作符儲存在一起。