【01】Flink 之理論學習

1 Flink 理論基礎

1.1 實時計算對比

  • Storm 延遲低但吞吐量小
  • Spark Streaming 吞吐量大但是延遲高
  • Flink 是一種兼具低延遲和高吞吐量特點的流式計算技術,還是一套框架中同時支持批處理和流處理的一個計算平臺
    Flink 結構

1.2 Flink 特性

  • 高吞吐、低延遲、高性能
  • 支持帶事件時間的窗口(window)操作:time、count、session, data-driven
  • 支持有狀態計算的exactly once語義
  • 支持具有反壓功能的持續流模型
    反壓功能:在Streaming中也有,就是參數的控制功能,比如雙11時,當數據源,kafka中數據太多,實時計算處理不過來的時候,通過offset來壓制數據讀取的速度(要求:其中必須有消息隊列,Streaming中的反壓機制需要手動去調節)。
  • 支持基於輕量級分佈式快照(snapshot)實現的容錯
  • 同時支持batch on streaming處理和Streaming處理
  • Flink在JVM內部實現了自己的內存管理
    Spark在1.5版本之後實現了JVM內存管理。
  • 支持迭代計算
  • 支持程序自動優化:避免特定情況下shuffle、排序等昂貴操作,中間結果有必要時緩存
    避免特定情況下shuffle是區別於Spark很關鍵的一點,它是在代碼提交的時候就會進行代碼優化,剔除調冗餘的沒有意義的依賴關係,在提交代碼的時候就已經處理好了,也就是還沒有提交到AM的時候就已經處理好。Spark Streaming是在AM中處理的。

1.3 Flink 技術棧

Flink 技術棧
Manager進程
Flink 由兩類運行時JVM進程管理分佈式集羣的計算資源。
(1)JobManager進行負責分佈式任務管理,如任務調度、檢查點、故障恢復等。在高可用HA 分佈式部署時,系統中可以有多個JobManager,即一個leader加多個standby。 JobManager是Flink主從架構中的master。
(2)TashManager進程負責執行任務線程,以及緩存和傳輸stream。TaskManager是Flink主從架構中的worker。
此外,作爲作業的發起者,客戶端(client)向JobManager提交作業,但客戶端不是Flink運行時的一部分。

1.3.1 Flink運行的三種模式

  1. Local
  2. Cluster
    • Standalone
    • YARN
  3. Cloud

1.3.2 Flink Core

Runtime:分佈式Streaming Dataflow
Flink 和 Spark Streaming 不同之處:
Spark Core 和 Spark Streaming 最後都是運行在 RDD 上,是基於RDD的操作。
Flink Stream 處理:
DataStream API
Flink Batch 處理:
DataSet API

同spark—樣,Flink也有Flink Core (runtime層)來統一支持流處理和批處理
Flink Core (runtime層):是一個分佈式的流處理引擎,提供了支持Fl ink計算的全部核心實
現。

  • 支持分佈式流處理
  • JobGraph到ExecutionGraph的映射、調度,爲上層API層提供基礎服務

Flink API層:實現面向Stream的流處理和麪向batch的批處理API
特定應用領域庫:

  • Flink ML:提供機器學習Pipelines API並實現多種機器學習算法python scikit-learn
  • 圖計算庫Geliy:提供了圖計算相關API和多種圖計算算法實現

1.4 Flink API

1.4.1 API類型

  • DataSet:對靜態數據講行批處理操作、將靜態數據抽象分佈式數據集,使用
    Flink各種操作符處理數據集,支持Java、Scala、Python
  • Datastream:對數據進行流處理操作,將流式的數據抽象成分佈式數據流,用Flink各種操作符處理數據流,支持Java、Scala
  • Table API:對結構化數據進行查詢操作,將結構化數據抽象成關係表。並通過類SQL的DSL對關係表進行各種查詢操作,支持Java、Scala

1.4.2 數據集

有界與無界
數據集:
- 無界數據持續—圻,不停流入數據(交易日誌、 詁點擊日誌)
- 有界數據集:批次的,類似MapReduce處理的數據集

數據處理模型:
- 流處理:實時任務,任務一直運行,處理無界數據
- 批處理:批處理有界數據,有界數據代表數據是有限集合

Flink:將有界數據集當做無界數據集的一種特例
Spark Streaming:把無界數據集分割成有界,通過微批的方式對待流計算

1.5 Flink 架構

1.5.1 Flink數據處理組件

數據處理組件
簡單實現 Word Count 的流處理程序,其 StreamGraph 的形象表示:
Stream Graph
Flink API 圖解:
圖解API
任務執行:

  • runtime層以JobGraph形式接收程序。JobGraph即爲一個一般化的並行數據流圖(data
    flow
    ),它擁有任意數量的Task來接收和產生data stream、
  • DataStream API和DataSet API都會使用單獨編譯的處理方式生成JobGraph。 DataSet
    API使用optimizer來決定針對程序的優化方法,而DataStream API則使用stream builder
    來完成該任務
  • 在執行JobGraph時,Flink提供了多種候選部署方案(如local, remote, YARN等)。
  • Flink附隨了 一些產生DataSet或DataStream API程序的的類庫和API:處理邏輯表查詢
    的Table,機器學習的FlinkML,圖像處理的Geliy,複雜事件處理的CEP。

1.5.2 Streaming Dataflow

  • Flink程序實際執行,映射到流式數據流(Streaming Dataflow),有流和轉化符構成。
  • Stream類型RDD是一種數據集。可以從Source中來,也可以從別的Transformation轉化而來。
  • Flink Transformation和Spark算子基本一致。
    Streaming Dataflow

下一篇:【02】Flink 之滑動窗口統計單詞個數WordCount


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章