Flink(一)Flink基礎

1、Flink是什麼

Apache Flink是由Apache軟件基金會開發的開源流處理框架,其核心是用Java和Scala編寫的分佈式流數據流引擎。Flink以數據並行和流水線方式執行任意流數據程序,Flink的流水線運行時系統可以執行批處理和流處理程序。此外,Flink的運行時本身也支持迭代算法的執行。從部署上講,Flink支持local模式、集羣模式(standalone集羣或者Yarn集羣)、雲端部署。
-----------------Flink官網
Flink提供了多種抽象數據Api:
DataSet API, 對靜態數據進行批處理操作,將靜態數據抽象成分佈式的數據集,用戶可以方便地使用Flink提供的各種操作符對分佈式數據集進行處理,支持Java、Scala和Python。

DataStream API,對數據流進行流處理操作,將流式的數據抽象成分佈式的數據流,用戶可以方便地對分佈式數據流進行各種操作,支持Java和Scala。

Table API,對結構化數據進行查詢操作,將結構化數據抽象成關係表,並通過類SQL的DSL對關係表進行各種查詢操作。Flink 與 Hive 集成的功能會在 1.9.0 版本中作爲試用功能發佈,用戶可以通過 Table API 或者 SQL Client 的模式與 Hive 進行交互。10版本在寫這篇文章時發佈不久,完善了hive的部分,但是大多數公司生產中使用hive還是sparksql更加穩妥,期待未來Flink這方面做得更好。

2、Flink的特性、優點

  • 流式模型,高吞吐、低延時
  • 豐富的時間語義,支持 Event Time
  • 良好的亂序數據處理能力
  • 高度靈活的窗口,Flink 支持滾動窗口,滑動窗口,統計窗口,session 窗口,以及數據驅動的窗口
  • exactly-once 語義
  • 帶反壓的連續流模型,Flink streaming 在運行時有着天然的流控:慢的數據 sink 節點會反壓(backpressure)快的數據源(sources)
  • 完善的容錯機制
  • 批流api統一,且Api設計合理功能強大
  • 完善的狀態編程
  • 內存管理,Flink在 JVM 中實現了自己的內存管理。

2.1、流式模型,高吞吐、低延時

我們知道spark所有的高級api都是基於RDD的,而RDD本質上是批處理,SparkStreaming嚴格上來說是微批處理更合適,而Flink是嚴格的流式處理,基於事件驅動的,理論上來說可以每個event都觸發邏輯計算;因此它具有更高的吞吐和更低的延遲,在反欺詐、異常檢測、金融風控防盜刷等要求延時極低的業務場景非常適用。

2.2、豐富的時間語義,支持 Event Time

在流處理中,時間是一個非常核心的概念,是整個系統的基石。事件發生時有觸發時間、該事件到達Flink時有數據到達的時間、數據被真正處理時有處理時間。這幾個時間往往都是有延時的不可能是同一個時間點。
Flink支持三種時間語義:

  • Event Time:事件發生的時間,如用戶點擊某個按鈕時的時間
  • Processing Time:事件被真正處理的時間,Flink的Task線程處理該數據的時間
  • Ingestion Time:事件到達Flink Souce的時間,用戶點擊行爲發送到kafka,kafka數據到達Flink的時間
    Flink默認是ProcessingTime,如果想使用eventTime可以進行如下設置:
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

2.3、良好的亂序數據處理能力

這一部分請參考我之前的博客:Flink之watermark和allowedLateness區別

2.4、高度靈活的窗口

Flink 中 Window 可以將無限流切分成有限流,是處理有限流的核心組件,現在Flink 中 Window 可以是時間驅動的(Time Window),也可以是數據驅動的(Count Window)

  1. 滾動窗口:
    翻滾時間窗口的窗口是固定的,比如設定一個1分鐘的時間窗口,該時間窗口將只計算當前1分鐘內的數據,而不會管前1分鐘或後1分鐘的數據。
    在這裏插入圖片描述
  2. 滑動窗口
    滑動窗口,顧名思義,該時間窗口是滑動的在這裏插入圖片描述
  3. 計數窗口
    Apache Flink 還提供計數窗口功能。如果計數窗口設置的爲 100 ,那麼將會在窗口中收集 100 個事件,並在添加第 100 個元素時計算窗口的值。
  4. session窗口
    主要是根據活動的事件進行窗口化,他們通常不重疊,也沒有一個固定的開始和結束時間。一個session window關閉通常是由於一段時間沒有收到元素。在這種用戶交互事件流中,我們首先想到的是將事件聚合到會話窗口中(一段用戶持續活躍的週期),由非活躍的間隙分隔開。

2.5、exactly-once 語義

這一部分內容較多,請參考我得下面兩篇博客
Flink狀態一致性保證 checkpoint
Flink 狀態一致性 exactly-once

2.6、帶反壓的連續流模型

Flink 背壓

3、標題

友情鏈接:
Flink之slot、並行度、graph優化
Flink之ProcessFunction API
Flink之聚合、WindowFunction
Flink之Trigger與Evictor
Flink之側輸出流和流的拆分

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