[Flink基本概念與部署]--Flink 程式設計模型【一】
一、Flink基本程式設計模型
1、Stateful Stream Processing
- 它位於最底層, 是core API 的底層實現;推薦學習時使用,生產中以穩定為主,不建議使用。
- processFunction:開發複雜、比較靈活,剛開始學習時,不推薦使用。
- 利用低階 API,構建一些新的元件(比如:利用其定時做一定情況下的匹配和快取)
- 靈活性高,但開發比較複雜。
2、Core APIs
- DataStream
- DataSet
3、Table & SQL
- SQL 構建在Table 之上,都需要構建Table 環境。
- 不同的型別的Table 構建不同的Table 環境。
- Table 可以與DataStream或者DataSet進行相互轉換。
- Streaming SQL 不同於儲存的SQL, 最終會轉化為流式執行計 劃。
二、Flink 構建的流程
1、構建計算環境(決定採用哪種計算執行方式)
datastream(無邊界,死迴圈) 和 dataset(有邊界,直到找到那個資料為止)
2、建立Source(可以多個數據源)
•對資料進行不同方式的轉換(提供了豐富的運算元)
•對結果的資料進行Sink(可以輸出到多個地方)
注意:不能少寫execute
3、Flink DataFlow
4、Flink 並行化DataFlow
5、window
無界的資料轉換為有界的。
•什麼是window?
•Window 類 型?
Count Window、Time Window、自定義window
•Window 聚合日常會遇到的問題(資料過熱,延遲資料丟棄, 反壓等問題)
6、Time型別
•Event Time
•Ingestion Time
•Processing Time
•經常與window 結合
舉例:
•一條日誌進入Flink的時間為2017-11-12 10:00:00,123】--進入時間,
到達window的系統時 間為2017-11-12 10:00:01,234】--process time. 日誌的內容如下:
•2017-11-02 18:37:15,624】--event time INFO
org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider - Failing over to rm2
7、State
•什麼是狀態,狀態託管
某個運算元的中間狀態,有狀態的計算比較複雜,無狀態計算比較簡單(不依賴於其他狀態)。
8、Operator State
儲存在記憶體中
9、Keyed State
根據具體情況儲存
10、State Backend (rocksdb + hdfs)
先存放在 rocksdb,再非同步同步到 hdfs 中。
11、checkpoint
- 量級容錯機制(全域性非同步,區域性同步)
- 保證exactly-once 語義
- flink 內部保持一致,不含其他元件時。
- 用於內部失敗的恢復
- 基本原理(這是面試經常問的)
(1)通過往source 注入barrier
(2)barrier作為checkpoint的標誌
12、savepoint
•流處理過程中的狀態歷史版本
•具有可以replay的功能
•外部恢復(應用重啟和升級--修改並行度)
•兩種方式觸發
(1)Cancel with savepoint:元資料 copy
(2)手動主動觸發:某個時間點觸發