Flink之大數據計算框架的特性分析

Apache Flink

Flink以數據並行和流水線方式執行任意流數據程序,Flink的流水線運行時系統可以執行批處理和流處理程序。

Flink框架的主要特徵包括:

  • 高吞吐&低延時(真·流處理)
  • 高可靠性(狀態存儲)
  • 支持流處理、批處理,還提供CEP(複合事件處理)、ML(機器學習)、SQL的API(All in One)

Flink組件棧
在這裏插入圖片描述

API支持

  • 對Streaming數據類應用,提供DataStream API
  • 對批處理類應用,提供DataSet API(支持Java/Scala)

整合支持

  • 支持Flink on YARN
  • 支持HDFS
  • 支持來自Kafka的輸入數據
  • 支持Apache HBase
  • 支持Hadoop程序
  • 支持Tachyon
  • 支持ElasticSearch
  • 支持RabbitMQ
  • 支持Apache Storm
  • 支持S3
  • 支持XtreemFS

Spark與Flink擁有類似功能,兩者主要區別包括:
Spark處理數據的單位是一批而不是單條,而數據採集卻是逐條進行的,本質上是micro-batch的處理方式。因此 Spark Streaming系統需要設置間隔使得數據彙總到一定的量後再一併操作,這個間隔就是批處理間隔。
Flink 的基本數據模型是數據流,及事件(Event) 的序列。數據流作爲數據的基本模型可能沒有表或者數據塊直觀熟悉,但是可以證明是完全等效的。流可以是無邊界的無限流,即一般意義上的流處理。也可以是有邊界的有限流,這樣就是批處理。
基於不同的底層數據模型,Flink能提供毫秒級的實時處理,Spark能提供秒級的實時處理。

Flink Streaming特性
高吞吐率和低延遲
Flink 的流處理引擎只需要很少配置就能實現高吞吐率和低延遲。下圖展示了一個分佈式計數的任務的性能,包括了流數據 shuffle 過程。
在這裏插入圖片描述

支持 Event Time 和亂序事件

Flink 支持了流處理和 Event Time 語義的窗口機制,Event time 使得計算亂序到達的事件或可能延遲到達的事件更加簡單。Event Time的時間包括:

  • Processing Time
  • Event Time
  • Ingestion Time
    在這裏插入圖片描述

狀態計算的Exactly-once

流程序可以在計算過程中維護自定義狀態,Flink 的 checkpointing 機制保證了即時在故障發生下也能保障狀態的 exactly once 語義。

在這裏插入圖片描述

靈活的時間窗口
Flink 支持在時間窗口,統計窗口,session 窗口,以及數據驅動的窗口,窗口可以通過靈活的觸發條件來定製,以支持複雜的流計算模式。
在這裏插入圖片描述

帶反壓的連續流模型
數據流應用執行的是不間斷的(常駐)operators。

Flink streaming 在運行時有着天然的流控:慢的數據 sink 節點會反壓(backpressure)快的數據源(sources)。
在這裏插入圖片描述

容錯性
Flink 的容錯機制是基於 Chandy-Lamport distributed snapshots 來實現的。

這種機制是非常輕量級的,允許系統擁有高吞吐率的同時還能提供強一致性的保障
在這裏插入圖片描述

Batch 和 Streaming 一個系統流處理和批處理共用一個引擎
Flink 爲流處理和批處理應用公用一個通用的引擎。批處理應用可以以一種特殊的流處理應用高效地運行。
在這裏插入圖片描述

內存管理
Flink 在 JVM 中實現了自己的內存管理。

應用可以超出主內存的大小限制,並且承受更少的垃圾收集的開銷

在這裏插入圖片描述

迭代和增量迭代
Flink 具有迭代計算的專門支持(比如在機器學習和圖計算中)。

增量迭代可以利用依賴計算來更快地收斂。
在這裏插入圖片描述

自動調優
批處理程序會自動地優化一些場景,比如避免一些昂貴的操作(如 shuffles 和 sorts),還有緩存一些中間數據。
在這裏插入圖片描述

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