Spark架構(gòu)模式與Flink的對比

Spark架構(gòu)模式與Flink的對比

Spark和Flink都屬于流批一體的分布式計算引擎谬泌。Flink屬于流處理框架务热,通過流來模擬批求晶,Spark屬于批處理框架,通過批來模擬流舵变。其分別屬于Lambda架構(gòu)和Dataflow架構(gòu)。

Spark架構(gòu)模式

Spark包括集群資源管理器(Cluster Manager)瘦穆、多個運行作業(yè)任務(wù)的工作結(jié)點(Worker Node)纪隙、每個應(yīng)用的任務(wù)控制結(jié)點(Driver)和每個工作結(jié)點上負(fù)責(zé)具體任務(wù)的執(zhí)行進程(Executor)。屬于Master/Slave架構(gòu)扛或。Driver節(jié)點向資源管理器(Cluster Manager)申請資源瘫拣,資源管理器分配資源Worker,并在其上啟動Executor進程,Executor向Driver申請Task, Driver根據(jù)劃分的Job,生成DAG圖告喊,并依據(jù)Shuffle切分Stage,封裝為Taskset 分發(fā)為Worker上的Executor, Executor啟動線程執(zhí)行Task麸拄。

Untitled.png

Flink架構(gòu)模式

Flink包括,Jobmanager:負(fù)責(zé)協(xié)調(diào)分布式執(zhí)行黔姜,他們調(diào)度任務(wù)拢切、協(xié)調(diào) checkpoints、協(xié)調(diào)故障恢復(fù)等秆吵。高可用情況下可以啟動多個 JobManager淮椰,其中一個選舉為 leader,其余為 standby;Taskmanager:負(fù)責(zé)執(zhí)行具體的 tasks主穗、緩存泻拦、交換數(shù)據(jù)流,至少有一個 TaskManager忽媒;Slot:每個 task slot 代表 TaskManager 的一個固定部分資源争拐,Slot 的個數(shù)代表著 taskmanager 可并行執(zhí)行的 task 數(shù)。

Untitled.png

Flink也屬于Master/slave架構(gòu)晦雨,當(dāng)Flink執(zhí)行executor會自動根據(jù)程序代碼生成DAG數(shù)據(jù)流圖架曹,ActorSystem創(chuàng)建Actor將數(shù)據(jù)流圖發(fā)送給JobManager中的Actor,jobManager會不斷接收TaskManager的心跳消息闹瞧,從而可以獲取到有效的TaskManager, JobManager通過調(diào)度器在TaskManager中調(diào)度Task到空閑的Task slot(在Flink中绑雄,最小的調(diào)度單元就是task,對應(yīng)就是一個線程)在程序運行過程中奥邮,task與task之間是可以進行數(shù)據(jù)傳輸?shù)耐蛭askManager啟動之初就啟動了所有的Task slot∏⑾伲總而言之脚粟,F(xiàn)link采用了基于Operator的連續(xù)流模型,F(xiàn)link最核心的數(shù)據(jù)結(jié)構(gòu)是Stream已脓,它代表一個運行在多分區(qū)上的并行流珊楼。與 Spark 的 RDD 不同的是,Stream 代表一個數(shù)據(jù)流而不是靜態(tài)數(shù)據(jù)的集合度液。所以厕宗,它包含的數(shù)據(jù)是隨著時間增長而變化的。而且 Stream 上的轉(zhuǎn)換操作都是逐條進行的堕担,即每當(dāng)有新的數(shù)據(jù)進來已慢,整個流程都會被執(zhí)行并更新結(jié)果。

Untitled.png

Flink 通過 Task Slots 來定義執(zhí)行資源霹购。每個 TaskManager 有一到多個 task slot佑惠,每個 task slot 可以運行一條由多個并行 task 組成的流水線。所以說Flink計算任務(wù)分配是固定的齐疙,將StreamGraph拆分為Task后分布執(zhí)行在不同的節(jié)點的slot內(nèi)膜楷。

Spark vs Flink

  1. Flink是一個流處理系統(tǒng),采用Dataflow架構(gòu)贞奋。其節(jié)點的數(shù)據(jù)傳輸方式為赌厅,當(dāng)一條數(shù)據(jù)被處理完成后,序列化到緩存中轿塔,然后立刻通過網(wǎng)絡(luò)傳輸?shù)较乱粋€節(jié)點特愿,由下一個節(jié)點繼續(xù)處理(Flink以固定的緩存塊仲墨,大小設(shè)置為0則為純流)。Spark是批處理系統(tǒng)揍障,其數(shù)據(jù)節(jié)點間的傳輸方式為目养,當(dāng)一條數(shù)據(jù)被處理完成后,序列化到緩存中毒嫡,并不會立刻通過網(wǎng)絡(luò)傳輸?shù)较乱粋€節(jié)點癌蚁,當(dāng)緩存寫滿,就持久化到本地硬盤上审胚,當(dāng)所有數(shù)據(jù)都被處理完成后匈勋,才開始將處理后的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)较乱粋€節(jié)點礼旅。所以批處理系統(tǒng)更適合處理吞吐量大的任務(wù)膳叨,流處理系統(tǒng)適合處理低延時要求的任務(wù)。
  2. 任務(wù)的調(diào)度不同痘系,flink 的拓?fù)鋱D生成提交執(zhí)行之后(分布到TaskManager的slot中后)菲嘴,除非故障,否則拓?fù)洳考?zhí)行位置不變汰翠,并行度由每一個算子并行度決定(每一個算子可以設(shè)置自己的并行讀)龄坪,F(xiàn)link的slot的在TaskManager創(chuàng)建時就已經(jīng)確定。Spark是構(gòu)建 DGA 圖复唤,劃分Stage,生成Taskset,Executor申請Task,并根據(jù)任務(wù)創(chuàng)建線程執(zhí)行任務(wù)健田。
  3. Flink支持三種時間機制:事件時間,注入時間佛纫,處理時間妓局,同時支持 watermark 機制處理滯后數(shù)據(jù)。Spark Streaming 只支持處理時間呈宇,Structured streaming 支持處理時間和事件時間好爬,同時支持 watermark 機制處理滯后數(shù)據(jù)。
  4. Flink和Spark雖然都支持Exactly once的語義一致性甥啄,但是其原理不同存炮,Spark 使用checkpoint,只能保證數(shù)據(jù)不丟失,不能做到一致性蜈漓。在使用kafka時需穆桂,維護offset,同時結(jié)果輸出和 offset 提交必須在一個事務(wù),才能保證一致性融虽。Flink使用兩階段提交協(xié)議以及預(yù)提交(pre-commit)階段來解決語義一致性享完。
  5. Spark與Flink背壓不同,Spark Streaming 在原有的架構(gòu)上加入了一個 RateController衣形,利用的算法是 PID驼侠,需要的反饋數(shù)據(jù)是任務(wù)處理的結(jié)束時間姿鸿、調(diào)度時間、處理時間倒源、消息條數(shù)苛预,這些數(shù)據(jù)是通過 SparkListener 體系獲得,然后通過 PIDRateEsimator 的 compute 計算得到一個速率笋熬,進而可以計算得到一個 offset热某,然后跟限速設(shè)置最大消費條數(shù)比較得到一個最終要消費的消息最大 offset。與 Spark Streaming 的背壓不同的是胳螟,F(xiàn)link 背壓是 jobmanager 針對每一個 task 每 50ms 觸發(fā) 100 次 Thread.getStackTrace() 調(diào)用昔馋,求出阻塞的占比。

參考:https://blog.csdn.net/b6ecl1k7BS8O/article/details/81350587

Spark 和 Flink 的應(yīng)用場景

  1. Spark 適合于吞吐量比較大的場景糖耸,數(shù)據(jù)量非常大而且邏輯復(fù)雜的批數(shù)據(jù)處理秘遏,并且對計算效率有較高要求(比如用大數(shù)據(jù)分析來構(gòu)建推薦系統(tǒng)進行個性化推薦、廣告定點投放等)嘉竟。
  2. 其次邦危,Spark是批處理架構(gòu),適合基于歷史數(shù)據(jù)的批處理舍扰。最好是具有大量迭代計算場景的批處理倦蚪。
  3. Spark可以支持近實時的流處理,延遲性要求在在數(shù)百毫秒到數(shù)秒之間边苹。
  4. Spark的生態(tài)更健全陵且,SQL操作也更加健全,已經(jīng)存在Spark生態(tài)的可以直接使用个束。
  5. Flink 主要用來處理要求低延時的任務(wù)慕购,實時監(jiān)控、實時報表播急、流數(shù)據(jù)分析和實時倉庫脓钾。
  6. Flink可以用于事件驅(qū)動型應(yīng)用,數(shù)據(jù)管道桩警,數(shù)據(jù)流分析等可训。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捶枢,隨后出現(xiàn)的幾起案子握截,更是在濱河造成了極大的恐慌,老刑警劉巖烂叔,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨胞,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒜鸡,警方通過查閱死者的電腦和手機胯努,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門牢裳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叶沛,你說我怎么就攤上這事蒲讯。” “怎么了灰署?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵侣监,是天一觀的道長屿愚。 經(jīng)常有香客問我敲才,道長孤钦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任肴茄,我火速辦了婚禮晌畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘独郎。我一直安慰自己踩麦,他們只是感情好枚赡,可當(dāng)我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布氓癌。 她就那樣靜靜地躺著,像睡著了一般贫橙。 火紅的嫁衣襯著肌膚如雪贪婉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天卢肃,我揣著相機與錄音疲迂,去河邊找鬼。 笑死莫湘,一個胖子當(dāng)著我的面吹牛尤蒿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幅垮,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼腰池,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忙芒?” 一聲冷哼從身側(cè)響起示弓,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呵萨,沒想到半個月后奏属,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡潮峦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年囱皿,在試婚紗的時候發(fā)現(xiàn)自己被綠了勇婴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘱腥,死狀恐怖咆耿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爹橱,我是刑警寧澤萨螺,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站愧驱,受9級特大地震影響慰技,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜组砚,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一吻商、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糟红,春花似錦艾帐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至事扭,卻和暖如春捎稚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背求橄。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工今野, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罐农。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓条霜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涵亏。 傳聞我的和親對象是個殘疾皇子宰睡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,442評論 2 359