1. 程式人生 > >[Flink基本概念與部署]--Flink 程式設計模型【一】

[Flink基本概念與部署]--Flink 程式設計模型【一】

一、Flink基本程式設計模型

圖1

 

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)手動主動觸發:某個時間點觸發