面試題百日百刷-flink篇(一)
今日的面試題:
1.Flink相比傳統(tǒng)的Spark Streaming區(qū)別?
這個(gè)問(wèn)題是一個(gè)非常宏觀的問(wèn)題,因?yàn)閮蓚€(gè)框架的不同點(diǎn)非常之多。但是在面試時(shí)有非常重要的一點(diǎn)一定要回答出來(lái):Flink?是標(biāo)準(zhǔn)的實(shí)時(shí)處理引擎,基于事件驅(qū)動(dòng)。而?Spark Streaming?是微批(Micro-Batch)的模型。
下面我們就分幾個(gè)方面介紹兩個(gè)框架的主要區(qū)別:
1.?架構(gòu)模型Spark Streaming?在運(yùn)行時(shí)的主要角色包括:Master、Worker、Driver、Executor,F(xiàn)link?在運(yùn)行時(shí)主要包含:Jobmanager、Taskmanager和Slot。
2.?任務(wù)調(diào)度Spark Streaming?連續(xù)不斷的生成微小的數(shù)據(jù)批次,構(gòu)建有向無(wú)環(huán)圖DAG,Spark Streaming?會(huì)依次創(chuàng)建?DStreamGraph、JobGenerator、JobScheduler。Flink?根據(jù)用戶提交的代碼生成?StreamGraph,經(jīng)過(guò)優(yōu)化生成?JobGraph,然后提交給?JobManager進(jìn)行處理,JobManager?會(huì)根據(jù)?JobGraph?生成?ExecutionGraph,ExecutionGraph?是?Flink?調(diào)度最核心的數(shù)據(jù)結(jié)構(gòu),JobManager?根據(jù)?ExecutionGraph?對(duì)?Job?進(jìn)行調(diào)度。
3.?時(shí)間機(jī)制Spark Streaming?支持的時(shí)間機(jī)制有限,只支持處理時(shí)間。?Flink?支持了流處理程序在時(shí)間上的三個(gè)定義:處理時(shí)間、事件時(shí)間、注入時(shí)間。同時(shí)也支持?watermark?機(jī)制來(lái)處理滯后數(shù)據(jù)。
4.?容錯(cuò)機(jī)制對(duì)于?Spark Streaming?任務(wù),我們可以設(shè)置?checkpoint,然后假如發(fā)生故障并重啟,我們可以從上次?checkpoint?之處恢復(fù),但是這個(gè)行為只能使得數(shù)據(jù)不丟失,可能會(huì)重復(fù)處理,不能做到恰好一次處理語(yǔ)義。Flink?則使用兩階段提交協(xié)議來(lái)解決這個(gè)問(wèn)題。
2.Flink的組件棧有哪些?
根據(jù)?Flink?官網(wǎng)描述,F(xiàn)link?是一個(gè)分層架構(gòu)的系統(tǒng),每一層所包含的組件都提供了特定的抽象,用來(lái)服務(wù)于上層組件。

自下而上,每一層分別代表:Deploy?層:該層主要涉及了Flink的部署模式,在上圖中我們可以看出,F(xiàn)link?支持包括local、Standalone、Cluster、Cloud等多種部署模式。Runtime?層:Runtime層提供了支持?Flink?計(jì)算的核心實(shí)現(xiàn),比如:支持分布式?Stream?處理、JobGraph到ExecutionGraph的映射、調(diào)度等等,為上層API層提供基礎(chǔ)服務(wù)。API層:API?層主要實(shí)現(xiàn)了面向流(Stream)處理和批(Batch)處理API,其中面向流處理對(duì)應(yīng)DataStream?API,面向批處理對(duì)應(yīng)DataSet API,后續(xù)版本,F(xiàn)link有計(jì)劃將DataStream和DataSet API進(jìn)行統(tǒng)一。
Libraries層:該層稱為Flink應(yīng)用框架層,根據(jù)API層的劃分,在API層之上構(gòu)建的滿足特定應(yīng)用的實(shí)現(xiàn)計(jì)算框架,也分別對(duì)應(yīng)于面向流處理和面向批處理兩類。面向流處理支持:CEP(復(fù)雜事件處理)、基于SQL-like的操作(基于Table的關(guān)系操作);面向批處理支持:FlinkML(機(jī)器學(xué)習(xí)庫(kù))、Gelly(圖處理)。