俗話說知子莫若父,要想了解一門技術就要看官方的介紹。Flink官網對Flink的介紹是這樣的:算法
Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams. Flink has been designed to run in all common cluster environments, perform computations at in-memory speed and at any scale.
額...看不懂。翻譯過來就是:apache
apache flink是一個用於在無界和有界數據流上進行有狀態計算的分佈式處理框架和引擎。Flink被設計成能夠在全部常見的集羣環境中運行,之內存速度和任何規模執行計算。
彷佛太籠統了。接下來咱們就深刻的瞭解一下Flink到底是一個什麼鬼。網絡
要想了解Flink咱們還得從分佈式計算的歷史講起,因此歷史課時間到。架構
在國外一些社區,有不少人講計算引擎分爲了四代,雖然這並不能表明全部人的觀點,可是咱們能夠在這些分代中看出計算引擎的區別。框架
首先第一代的計算引擎,無疑就是Hadoop承載的MapReduce了。相信瞭解大數據的童鞋對MapReduce都不會陌生,它將計算分紅兩部分,一部分是Map階段,一部分是Reduce階段。這對於上層應用來講就不得不拆分算法。若是是較爲複雜的計算,甚至於不得不實現多個Job的串聯,例如迭代計算。分佈式
因爲第一代計算引擎的弊端,催生了支持DAG ( Directed Acyclic Graph)框架的誕生。支持DAG框架的計算引擎被劃分爲了第二代計算引擎,好比Tez或Oozie。第二代計算引擎執行的大多數是批量任務。oop
前兩代的計算引擎都是延遲較爲嚴重,無法知足實時性要求比較高的需求。而以Spark爲表明的第三代計算引擎很好的解決了這一問題。第三代計算引擎的特色主要是 Job 內部的 DAG 支持(不跨越Job),以及強調的實時計算。這裏強調一點,這裏的實時計算實質上是微批處理,並非真正意義上的實時處理。性能
接下來的第四代計算引擎實現了真正意義上的實時處理,這就是咱們今天介紹的Flink。固然Flink除了可以實現數據的實時處理外也很好的支持了批處理和DAG的運算。測試
迭代計算性能對比測試:Flink > Spark > Hadoop(MR)。迭代次數越多越明顯,性能上Flink優於Spark和Hadoop最主要的緣由是Flink支持增量迭代,具備對迭代自動優化的功能。大數據
Flink最大的特點就是它的流式處理方式。而在介紹Flink的流式處理咱們要先了解一下有界數據和無界數據,好,上圖:
有界數據流(bounded stream):具備定義的開始點和結束點。
無界數據流(unbounded stream):有一個起點,但沒有定義的終點。
無界數據集包括但不限於以下
就現實來講,在Flink出現以前因爲處理方式的侷限性,咱們一般會將一些無界數據流人爲的切分紅有界數據流,而後在基於有界數據流進行處理。
流處理(Streaming):只要有數據生成則立刻執行計算程序
批處理(Batch):在有限的時間內執行並運行到完成的處理,完成後釋放計算資源
因而可知Spark Streaming實際上是批處理。
咱們可使用任一類型的處理模型來處理任一類型的數據集,但不必定是最優的方案。事實上在之前咱們一直在用批處理來處理無界數據集,甚至是如今依然在用。
Flink提供了多種集羣搭建方式:
Flink與全部的大數據計算框架同樣,支持橫向擴展。也就是說,理論上Flink能夠支持無限量的CPU、內存、磁盤和網絡IO。