Flink

<meta name="source" content="lake">

  • Google File System

  • Big Table

  • Map Reduce

  • HDFS

  • HBase

  • Hadoop

Hadoop 基于硬盤棉胀,可以處理海量數(shù)據(jù)垢乙;

Spark 基于內(nèi)存释移,性能提高百倍祖秒,微批(500ms)究反;

Flink 基于 Google Dataflow Model(2015)聂喇,真正的實(shí)時(shí)框架辖源;

Beam 寫一套代碼,可以運(yùn)行在 Spark 和 Flink 引擎上希太。

Flink 用于對(duì)無(wú)界和有界數(shù)據(jù)流進(jìn)行狀態(tài)計(jì)算

  • 低延遲(Spark Streaming的延遲是秒級(jí)克饶,F(xiàn)link延遲是毫秒級(jí))
  • 高吞吐(阿里雙十一使用Flink處理4.6PB,雙十一大屏)
  • 結(jié)果的準(zhǔn)確性和良好的容錯(cuò)性(exactly-once)

Lambda 架構(gòu)

批處理 + 流處理

image.png

流處理系統(tǒng)為了更快看到結(jié)果誊辉,批處理保證精準(zhǔn)性矾湃,

在Flink之前都不能做這樣一點(diǎn),F(xiàn)link是批流統(tǒng)一的堕澄。

image.png

Flink 主要特點(diǎn)

事件驅(qū)動(dòng)

image.png

來(lái)一條數(shù)據(jù)邀跃,出發(fā)一次算子的計(jì)算,事件驅(qū)動(dòng)

后端事件驅(qū)動(dòng)的代表:netty

大數(shù)據(jù)最難學(xué)習(xí)的框架:Flink

后端最難學(xué)習(xí)的是:netty

前端最難學(xué)習(xí)的是:Rxjs

編程里最難學(xué)習(xí)的是:函數(shù)式編程

基于流的世界觀(流批統(tǒng)一)

在 Flink 中蛙紫,一切都是由流組成的拍屑,離線數(shù)據(jù)是無(wú)界的流,用流來(lái)模擬批坑傅。

Flink 分層API

  • 越頂層越抽象僵驰,表達(dá)含義越簡(jiǎn)明,使用越方便
  • 越底層越具體,表達(dá)能力越豐富蒜茴,使用越靈活
image.png

Flink 其它特點(diǎn)

  • 支持事件時(shí)間和處理時(shí)間語(yǔ)義
  • 精確一次的狀態(tài)一致性保證
  • 低延遲(毫秒級(jí))
  • 和很多大數(shù)據(jù)中間接連接

事件時(shí)間:事件真實(shí)發(fā)生的時(shí)間星爪,要求數(shù)據(jù)中有時(shí)間戳

處理時(shí)間:事件到達(dá)節(jié)點(diǎn)

Flink vs Spark Streaming

Spark 采用 RDD 模型,RDD的集合

Flink 基本數(shù)據(jù)模型是數(shù)據(jù)流矮男,以及事件序列

選型

運(yùn)行時(shí)架構(gòu)

Flink wordcount

創(chuàng)建 IDEA -> Maven 項(xiàng)目 -> Add Archetype

  • org.apache.flink
  • flink-quickstart-scala
  • 1.10.0

選擇某項(xiàng)目原型,點(diǎn)擊 Next

設(shè)置項(xiàng)目名以及我們組織的一些信息(可選)

任務(wù)提交流程(獨(dú)立集群)

image.png

程序的并行度設(shè)置為10室谚,那么并行任務(wù)的數(shù)量就是10毡鉴,任務(wù)管理器會(huì)向資源管理器請(qǐng)求10個(gè)任務(wù)槽。

Yarn

可以讀成雅安秒赤,

任務(wù)調(diào)度原理

image.png

Flink 程序 編譯之后猪瞬,可能有一定的優(yōu)化,然后成為一個(gè) Dataflow Graph入篮,通過(guò)Actor System (異步I/O)提交陈瘦,發(fā)送心跳信息確認(rèn)是否還活著。

Flink 中每個(gè) TaskManager 都是一個(gè) JVM 進(jìn)程潮售,每一個(gè) task slot 都會(huì)啟動(dòng)一個(gè)線程痊项,它可能會(huì)在獨(dú)立的線程上執(zhí)行一個(gè)或多個(gè) subtask,每一個(gè) task 占用一個(gè) task slot

為了控制一個(gè) TaskManager 能接受多少個(gè) task酥诽,TaskManager 通過(guò) task slot 來(lái)進(jìn)行控制(一個(gè) TaskManager 至少有一個(gè) slot)

image.png

每一個(gè)算子后面都可以設(shè)置一個(gè)并行度鞍泉,比如上圖 sink 并行度是1,其他算子是 2

image.png

可以在 flink-conf.yaml 配置文件中設(shè)置每個(gè) TaskManager 默認(rèn)插槽(slot)數(shù)量肮帐。

假設(shè)目前3個(gè) TaskManager咖驮,則有9個(gè)slot,若設(shè)置并行度為1训枢,那么空閑8個(gè)slot托修。

任務(wù)槽是個(gè)靜態(tài)的概念,可以寫死恒界,但是并行度是一個(gè)動(dòng)態(tài)的概念睦刃,在我們的編程中可以動(dòng)態(tài)修改。

程序與數(shù)據(jù)流

  • 所有的 Flink 程序都是由三部分組成的:Source十酣、Transformation 和 Sink眯勾。
  • Source 負(fù)責(zé)讀取數(shù)據(jù)源,Transformation 利用各種算子進(jìn)行處理加工婆誓,Sink 負(fù)責(zé)輸出/持久化吃环。

所以在運(yùn)行的時(shí)候,F(xiàn)link 程序會(huì)被映射成 dataflow洋幻,包含以上三部分郁轻,dataflow 類似于有向無(wú)環(huán)圖(DAG),在大部分情況下,transformation 跟 dataflow 中的算子是一一對(duì)應(yīng)的關(guān)系好唯。

image.png

執(zhí)行圖

StreamGraph

寫的代碼通過(guò) Stream API 編寫的代碼生成的最初的圖竭沫,用來(lái)表示程序的拓?fù)浣Y(jié)構(gòu)。

JobGraph

經(jīng)過(guò)優(yōu)化后生成了 JobGraph骑篙,提交給 JobManager的數(shù)據(jù)結(jié)構(gòu)就是這種蜕提,主要優(yōu)化為將多個(gè)符合條件的算子 chain 在一起作為一個(gè)節(jié)點(diǎn)。

ExecutionGraph

JobGraph 的并行化版本靶端,是調(diào)度層的最核心的數(shù)據(jù)結(jié)構(gòu)谎势。

image.png

Flink 運(yùn)行時(shí)組件

image.png

分發(fā)器

CheckPoint機(jī)制

容錯(cuò)

Flink 會(huì)在指定的時(shí)間段上保存狀態(tài)信息,如果 Flink 掛了就可以把上一次狀態(tài)信息再撈出來(lái)杨名。

Flink 本身就是有狀態(tài)的脏榆,F(xiàn)link 可以讓你選擇執(zhí)行過(guò)程中的數(shù)據(jù)保存在哪里,在 Flink 中稱作 State Backends 台谍,CheckPoint 也是保存在這之上

  • MemoryStateBackend
  • FsStateBackend
  • RocksDBStateBackend

  • 內(nèi)存
  • 文件系統(tǒng) HDFS
  • 本地?cái)?shù)據(jù)庫(kù)

精確一次 exactly-once

DataStream API

checkpoint 的存儲(chǔ)

可以是內(nèi)存须喂、文件系統(tǒng) HDFS 或 RocksDB

開發(fā)角度的大致流程

Flink 程序 -> StreamGraph -> JobGraph -> ExecutionGraph -> 物理執(zhí)行圖

image.png
image.png

面試題

Flink vs Spark Streaming

Flink 是真正的流處理,延遲在毫秒級(jí)

Flink 可以處理事件時(shí)間趁蕊,多種時(shí)間語(yǔ)義

Flink CheckPoint 機(jī)制比 Spark 更靈活坞生,性能更高

Flink 易于實(shí)現(xiàn)端到端一致性

CheckPoint 存在哪里

內(nèi)存、文件系統(tǒng)掷伙、RocksDB

三 Flink 部署

四 Flink 運(yùn)行時(shí)架構(gòu)

主要包括四個(gè)不同的組件

  • 作業(yè)管理器 JobManager
  • 資源管理器 ResourceManager
  • 任務(wù)管理器 TaskManager
  • 分發(fā)器 Dispatcher

Flink 是用 Java 和 Scala 實(shí)現(xiàn)的恨胚,所有組件都會(huì)運(yùn)行在 JVM 上

image.png

Flink 時(shí)間概念和應(yīng)用場(chǎng)景?

  • 事件時(shí)間炎咖,一般數(shù)據(jù)中要帶當(dāng)時(shí)的時(shí)間戳赃泡,例如軌跡點(diǎn)數(shù)據(jù)有被采集時(shí)的時(shí)間戳
  • 處理時(shí)間,執(zhí)行操作算子的本地系統(tǒng)時(shí)間乘盼,與機(jī)器相關(guān)
  • 攝取時(shí)間升熊,數(shù)據(jù)進(jìn)入 Flink 的時(shí)間。多個(gè)數(shù)據(jù)源算子的情況下绸栅,每個(gè)數(shù)據(jù)源算子會(huì)使用本地系統(tǒng)時(shí)鐘指派攝取時(shí)間级野,后續(xù)基于時(shí)間的相關(guān)操作中,都會(huì)使用數(shù)據(jù)記錄中的攝取時(shí)間粹胯。env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) 可以設(shè)置時(shí)間類型

設(shè)置水位線 Watermark 蓖柔,即遇到了一個(gè)時(shí)間戳達(dá)到了窗口關(guān)閉時(shí)間,不應(yīng)該立刻觸發(fā)窗口于計(jì)算风纠,而是等待一段時(shí)間况鸣,等遲到的數(shù)據(jù)來(lái)了再關(guān)閉窗口

Watermark 可以正確的處理亂序時(shí)間,通常用 Watermark 機(jī)制結(jié)合 window 來(lái)實(shí)現(xiàn)竹观,window 的執(zhí)行也是由 Watermark 觸發(fā)的镐捧。

image.png

滑動(dòng)窗口

image.png

這個(gè)元素屬于 n 個(gè)窗口潜索,需要復(fù)制多份。比如 (Value, 6s) 代表在 6s 到達(dá)的數(shù)據(jù)懂酱,它屬于 [0s, 10s] 和 [5s, 15s] 竹习。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市列牺,隨后出現(xiàn)的幾起案子整陌,更是在濱河造成了極大的恐慌,老刑警劉巖瞎领,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌辫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡默刚,警方通過(guò)查閱死者的電腦和手機(jī)甥郑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門逃魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荤西,“玉大人,你說(shuō)我怎么就攤上這事伍俘⌒靶浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵癌瘾,是天一觀的道長(zhǎng)觅丰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妨退,這世上最難降的妖魔是什么妇萄? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮咬荷,結(jié)果婚禮上冠句,老公的妹妹穿的比我還像新娘。我一直安慰自己幸乒,他們只是感情好懦底,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罕扎,像睡著了一般聚唐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腔召,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天杆查,我揣著相機(jī)與錄音,去河邊找鬼臀蛛。 笑死根灯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烙肺,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纳猪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桃笙?” 一聲冷哼從身側(cè)響起氏堤,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搏明,沒(méi)想到半個(gè)月后鼠锈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡星著,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年购笆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虚循。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡同欠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出横缔,到底是詐尸還是另有隱情铺遂,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布茎刚,位于F島的核電站襟锐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏膛锭。R本人自食惡果不足惜粮坞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望初狰。 院中可真熱鬧莫杈,春花似錦、人聲如沸跷究。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俊马。三九已至丁存,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柴我,已是汗流浹背解寝。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艘儒,地道東北人聋伦。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓夫偶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親觉增。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兵拢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Flink學(xué)習(xí)總結(jié) flink是什么:為分布式、高性能逾礁、隨時(shí)可用以及準(zhǔn)確的流處理應(yīng)用程序打造的開源流處理框架 流處...
    倔強(qiáng)青銅弟中弟閱讀 566評(píng)論 0 0
  • 介紹 概述 Apache Flink是一個(gè)面向數(shù)據(jù)流處理和批量數(shù)據(jù)處理的可分布式的開源計(jì)算框架说铃,它基于同一個(gè)Fli...
    stephen_k閱讀 50,914評(píng)論 0 22
  • Flink運(yùn)行時(shí)組件 作業(yè)管理器(JobManager)、資源管理器(ResourceManager)嘹履、任務(wù)管理器...
    腰_214e閱讀 238評(píng)論 0 0
  • 今年 Flink 火的一塌糊涂砾嫉,一些大廠比如阿里巴巴也都開始使用 Flink 構(gòu)建實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)幼苛。 一、什么是 Fl...
    alexlee666閱讀 8,282評(píng)論 0 4
  • Flink 原理架構(gòu) 下圖是官網(wǎng)的一個(gè)架構(gòu)圖焕刮,有以下特點(diǎn):1:數(shù)據(jù)源有實(shí)時(shí)數(shù)據(jù)和非實(shí)時(shí)數(shù)據(jù)舶沿,比如數(shù)據(jù)庫(kù)、文件系統(tǒng)...
    走在鋼鐵森林中閱讀 632評(píng)論 0 1