Flink關(guān)注點

記錄一下個人看了一些Flink文章后的理解與個人關(guān)注點趟据,目錄如下队萤,

0. Overview
1. 基本概念
2. 并行Dataflow
3. 基本模塊
   - JobManager
   - TaskManagers
   - Client
4. 組件棧
   - Deployment層
   - Runtime層
   - API層
   - Libraries層
5. 內(nèi)部原理
   - 容錯機制
   - 調(diào)度機制
   - 迭代機制
   - 反壓機制
6. Reference

Overview

基于Flink 1.4油吭。
先來看看大數(shù)據(jù)計算引擎的發(fā)展路線下愈,

  1. 第一代纽绍,hadoop的MapReduce
  2. 第二代,DAG框架的Tez势似,Oozie
  3. 第三代拌夏,Job內(nèi)部的DAG支持,以及強調(diào)實時計算履因,spark
  4. 第四代障簿,迭代,流栅迄,批站故,SQL

基本概念

source -> transformation -> sink

  • stream是算子的中間結(jié)果數(shù)據(jù)
  • transformation是一個操作,它對一個或多個輸入stream進行計算處理毅舆,輸出一個或多個結(jié)果stream
  • streaming dataflow是一個執(zhí)行中的flink程序西篓,啟動于一個或多個source,結(jié)束于一個或多個sink
a complete streaming dataflow (flink apploication)

并行Dataflow

一個stream可以被分成多個stream分區(qū)(stream partition)憋活。
一個operator可以被分成多個operator subTask岂津。

parallel

基本模塊

flink類似spark,是一個基于master-slave風格的架構(gòu)余掖。
運行時runtime主要有2個進程寸爆,一個是JobManagers,另一個是TaskManagers盐欺;client不屬于運行時和程序執(zhí)行的一部分赁豆,而是用于準備dataflow并將其發(fā)送到JobManager。

flink生態(tài)部件

jobManager(master)是flink系統(tǒng)的協(xié)調(diào)者冗美,負責接收flink job魔种,調(diào)度組成job的多個task的執(zhí)行;手機job的狀態(tài)信息粉洼,管理flink集群中從節(jié)點taskManager节预,

  • registerTaskManager,在Flink集群啟動的時候属韧,TaskManager會向JobManager注冊
  • submitJob安拟,F(xiàn)link程序內(nèi)部通過Client向JobManager提交Flink Job,其中在消息SubmitJob中以JobGraph形式描述了Job的基本信息
  • cancelJob宵喂,請求取消一個Flink Job的執(zhí)行糠赦,CancelJob消息中包含了Job的ID
  • updateTaskExecutionState,TaskManager向JobManager請求更新狀態(tài)信息
  • requestNextInputSplit,運行在TaskManager上面的Task拙泽,請求獲取下一個要處理的輸入Split
  • jobStatusChanged淌山,表示Flink Job的狀態(tài)發(fā)生的變化

taskManager是一個actor(akka),負責執(zhí)行計算的worker顾瞻,在其上執(zhí)行flink job的一組task泼疑。每個taskManager負責管理其所在節(jié)點上的資源信息,如mem, disk, network荷荤,在啟動的時候?qū)①Y源狀態(tài)向jobManager匯報退渗,

  • 注冊階段,TaskManager會向JobManager注冊蕴纳,發(fā)送registerTaskManager消息
  • 可操作階段氓辣,接收并處理與Task有關(guān)的消息,如SubmitTask袱蚓、CancelTask、FailTask

client几蜻,當用戶提交一個flink程序時喇潘,會首先創(chuàng)建一個client,該client首先會對用戶提交的flink程序進行預處理梭稚,并提交到flink集群中颖低,

  • client需要從用戶提交的flink程序配置中獲取jobManager的地址,并建立到jobManager的連接弧烤,將flink job提交給jobManager
  • client會將用戶提交的flink程序組裝成一個jobGraph忱屑,并且是以jobGraph的形式提交。一個jobGraph是一個flink dataflow暇昂,它是由多個jobVertex組成的DAG莺戒。JobManager會將一個JobGraph轉(zhuǎn)換映射為一個ExecutionGraph

組件棧

Flink是一個分層架構(gòu)的系統(tǒng),每一層所包含的組件都提供了特定的抽象急波,用來服務于上層組件从铲,

flink組件棧
flink on yarn

啟動flink yarn session的時候澄暮,

  1. 最左邊的模塊Flink YARN Client check requested resources (containers and memory) are available名段,檢查資源可得性
  2. Client uploads a jar that contains Flink and the configuration to HDFS,上傳代碼和配置
  3. Client request a YARN container to start the ApplicationMaster(AM泣懊,單個作業(yè)的資源管理和任務監(jiān)控模塊伸辟,以前是一個全局的JobTracker負責的,現(xiàn)在每個作業(yè)都一個)馍刮,啟動yarn AM
  4. AM starts allocating the containers for Flink’s TaskManagers, which will download the jar file and the modified configuration from the HDFS

客戶端client負責向ResourceManager(RM)提交ApplicationMaster信夫,并查詢應用程序運行狀態(tài),ApplicationMaster(AM)負責向ResourceManager申請資源(以Container形式表示),并與NodeManager(NM)通信以啟動各個Container忙迁,此外脐彩,ApplicationMaster還負責監(jiān)控各個任務運行狀態(tài),并在失敗是為其重新申請資源姊扔。

flink RM Dispatcher惠奸,用于統(tǒng)一發(fā)布Job并監(jiān)控實例的運行。但是可以選擇是否使用Dispatcher恰梢。

without dispatch yarn
with dispatch yarn
with dispatch mesos
  • Runtime層佛南,提供了支持Flink計算的全部核心實現(xiàn)
  • API層,實現(xiàn)了面向無界streaming的流處理和面向有界Batch的批處理接口
  • Libraries層嵌言,F(xiàn)link應用框架層嗅回,CEP復雜事件處理、Table基于SQL-like的關(guān)系操作摧茴、FlinkML機器學習绵载、Gelly圖處理

內(nèi)部原理

容錯機制

Flink基于Checkpoint機制實現(xiàn)容錯,它的原理是不斷地生成分布式Streaming數(shù)據(jù)流Snapshot苛白。在流處理失敗時娃豹,通過這些Snapshot可以恢復數(shù)據(jù)流處理。

Barriers

checkpoint, snapshot, stream aligning, exactly once, at least once

調(diào)度機制

在jobManager购裙,會接收到client提交的jobGraph形式的flink job懂版,并將其轉(zhuǎn)換映射為executionGraph

JobManager transforms the JobGraph into an ExecutionGraph
  • jobGraph是一個job的用戶邏輯視圖表示,將一個用戶要對數(shù)據(jù)流進行的處理表示為單個DAG圖
  • executionGraph是jobGraph的并行表示躏率,也就是實際jobManager調(diào)度一個job在taskManager上運行的邏輯視圖躯畴,也是一個DAG
Op

上圖用戶提交的Flink Job對各個Operator進行的配置(從下往上),即data source的并行度設置為4(最底層1個data source薇芝,但是其parallel=4)蓬抄,MapFunction的并行度也為4(中間層),ReduceFunction的并行度為3(頂層)夯到。

迭代機制

機器學習和圖計算應用倡鲸,都會使用到迭代計算。flink通過迭代operator中定義step函數(shù)來實現(xiàn)迭代算法黄娘,包括Iterate和Delta Iterate兩類峭状,

iterate operator
delta iterate operator

反壓機制

flink使用了高效有界的分布式阻塞隊列,就像java通用的blockingQueue逼争。一個較慢的接收者會降低發(fā)送者的發(fā)送速率优床,因為一旦有界隊列滿了發(fā)送者會被阻塞。

flink在網(wǎng)絡傳輸場景下的內(nèi)存管理
  • 當netty接收端發(fā)送數(shù)據(jù)時誓焦,為了將netty中的數(shù)據(jù)拷貝到task中(往task寫入數(shù)據(jù))胆敞,InputChannel會向其對應的緩沖池localBufferPool申請內(nèi)存塊着帽,
    • 如果localBufferPool也沒有可用內(nèi)存塊且申請的數(shù)量還沒到池子(隊列)上限,則就向networkBufferPool申請內(nèi)存塊
    • 如果localBufferPool已申請的數(shù)量達到上限了移层,或者networkBufferPool也沒有可用內(nèi)存塊仍翰,此時task的netty channel會暫停讀取,上游的發(fā)送端會立即響應停止發(fā)送观话,拓撲進入反壓狀態(tài)
  • 當task線程寫數(shù)據(jù)到resultPartition時(task數(shù)據(jù)往外寫)予借,也會向池子請求內(nèi)存塊,如果沒有可用內(nèi)存塊時频蛔,也阻塞在請求內(nèi)存塊的地方灵迫,達到暫停寫入的目的
  • 在一個內(nèi)存塊被消費完成之后(在輸出端是指內(nèi)存塊中的字節(jié)寫入到netty channel;在輸入端是指內(nèi)存塊中的字節(jié)被反序列化成對象)晦溪,會調(diào)用buffer.recycle()方法瀑粥,將內(nèi)存塊還給localBufferPool,如果localBufferPool中當前申請的數(shù)量超過了池子容量三圆,則localBufferPool會將該內(nèi)存塊回收給networkBufferPool狞换。如果沒超池子容量,則繼續(xù)留在localBufferPool中舟肉,減少反復申請的開銷

backPressure在流式計算系統(tǒng)中用于協(xié)調(diào)上哀澈、下游operator的處理速度。因為在一個stream上進行處理的多個operator之間度气,它們的處理速度和方式可能非常不同,所以就存在上游operator如果處理速度過快膨报,下游operator可能會堆積stream記錄磷籍。因此,對下游operator處理速度跟不上的情況现柠,如果下游operator能夠?qū)⒆约禾幚頎顟B(tài)傳播給上游operator院领,使得上游operator處理速度慢下來,從而緩解上述問題够吩。

堆棧跟蹤Sampling線程

JobManager會反復調(diào)用Task運行所在線程的Thread.getStackTrace()比然,默認情況下,JobManager會每隔50ms觸發(fā)對每個Task依次進行100次堆棧跟蹤調(diào)用周循,根據(jù)調(diào)用調(diào)用結(jié)果來確定Backpressure强法,通過計算得到一個比值radio來確定當前運行Job的Backpressure狀態(tài)。在Web界面上可以看到這個Radio值湾笛,它表示在一個內(nèi)部方法調(diào)用中阻塞(Stuck)的堆棧跟蹤次數(shù)饮怯,例如,radio=0.01嚎研,表示100次中僅有1次方法調(diào)用阻塞蓖墅。Flink目前定義了如下Backpressure狀態(tài):

  • OK: 0 <= Ratio <= 0.10
  • LOW: 0.10 < Ratio <= 0.5
  • HIGH: 0.5 < Ratio <= 1

Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末教翩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贪壳,更是在濱河造成了極大的恐慌饱亿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥袭,死亡現(xiàn)場離奇詭異路捧,居然都是意外死亡,警方通過查閱死者的電腦和手機传黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門杰扫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膘掰,你說我怎么就攤上這事章姓。” “怎么了识埋?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵凡伊,是天一觀的道長。 經(jīng)常有香客問我窒舟,道長系忙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任惠豺,我火速辦了婚禮银还,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洁墙。我一直安慰自己蛹疯,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布热监。 她就那樣靜靜地躺著捺弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝扛。 梳的紋絲不亂的頭發(fā)上列吼,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音苦始,去河邊找鬼冈欢。 笑死,一個胖子當著我的面吹牛盈简,可吹牛的內(nèi)容都是我干的凑耻。 我是一名探鬼主播太示,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼香浩!你這毒婦竟也來了类缤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邻吭,失蹤者是張志新(化名)和其女友劉穎餐弱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囱晴,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡膏蚓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畸写。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮瞧。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枯芬,靈堂內(nèi)的尸體忽然破棺而出论笔,到底是詐尸還是另有隱情,我是刑警寧澤千所,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布狂魔,位于F島的核電站,受9級特大地震影響淫痰,放射性物質(zhì)發(fā)生泄漏最楷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一待错、第九天 我趴在偏房一處隱蔽的房頂上張望籽孙。 院中可真熱鬧,春花似錦朗鸠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沟启,卻和暖如春忆家,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背德迹。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工芽卿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胳搞。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓卸例,卻偏偏與公主長得像称杨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筷转,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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

  • 簡單之美 | Apache Flink:特性唤殴、概念、組件棧到腥、架構(gòu)及原理分析http://shiyanjun.cn/...
    葡萄喃喃囈語閱讀 7,407評論 0 27
  • 介紹 概述 Apache Flink是一個面向數(shù)據(jù)流處理和批量數(shù)據(jù)處理的可分布式的開源計算框架朵逝,它基于同一個Fli...
    stephen_k閱讀 50,953評論 0 22
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)左电,斷路器廉侧,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • Flink初體驗 安裝 官網(wǎng):http://flink.apache.org/downloads.html 可以看...
    it_zzy閱讀 29,804評論 0 10
  • 最近幾本書同步讀,跟著心情任性地切換篓足。今天大部分時間在看"The Notebook"段誊。 掐指算借回來這本書足足有一...
    史妍閱讀 257評論 2 2