基于Kafka的實(shí)時(shí)計(jì)算引擎:Flink能否替代Spark候齿?

根據(jù) IBM 的統(tǒng)計(jì)報(bào)告顯示,過去兩年內(nèi)闺属,當(dāng)今世界上90%的數(shù)據(jù)產(chǎn)生源于新設(shè)備慌盯、傳感器以及技術(shù)的出現(xiàn),數(shù)據(jù)增長率也會(huì)為此加速掂器。而從技術(shù)上將亚皂,這意味著大數(shù)據(jù)領(lǐng)域,處理這些數(shù)據(jù)將變得更加復(fù)雜和具有挑戰(zhàn)性国瓮。例如移動(dòng)應(yīng)用廣告灭必、欺詐檢測、出租車預(yù)訂乃摹、患者監(jiān)控等場景處理時(shí)禁漓,需要對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,以便做出快速可行的決策孵睬。

目前業(yè)界有開源不少實(shí)時(shí)計(jì)算引擎播歼,以 Apache 基金會(huì)的兩款開源實(shí)時(shí)計(jì)算引擎最受歡迎,它們分別是 Apache Spark 和 Apache Flink 掰读。接下來秘狞,我們來聊一聊它們的使用場景、優(yōu)勢蹈集、局限性烁试、相似性、以及差異性拢肆。方便大家在做技術(shù)選型時(shí)减响,選擇切合項(xiàng)目場景的實(shí)時(shí)計(jì)算引擎。

說起實(shí)時(shí)計(jì)算善榛,可能會(huì)說到流式計(jì)算,那么流式和實(shí)時(shí)是否等價(jià)呻畸?嚴(yán)格意義上講移盆,它們沒有必然的聯(lián)系。實(shí)時(shí)計(jì)算代表的是處理數(shù)據(jù)耗時(shí)情況伤为,而流式計(jì)算代表的是處理數(shù)據(jù)的一種方式咒循。

流式處理

首先据途,它是一種數(shù)據(jù)處理引擎,其設(shè)計(jì)時(shí)考慮了無邊界的數(shù)據(jù)集叙甸。其次颖医,它與批處理不同,批處理的 Job 與數(shù)據(jù)的起點(diǎn)和終點(diǎn)有關(guān)系裆蒸,并且 Job 在處理完有限數(shù)據(jù)后結(jié)束熔萧,而流式處理用于處理連續(xù)數(shù)天、數(shù)月僚祷、數(shù)年佛致、或是永久實(shí)時(shí)的無界數(shù)據(jù)。

流處理的特點(diǎn)

容錯(cuò)性:如果節(jié)點(diǎn)出現(xiàn)故障辙谜,流式處理系統(tǒng)應(yīng)該能夠恢復(fù)俺榆,并且應(yīng)該從它離開的位置再次開始處理;

狀態(tài)管理:在有狀態(tài)處理要求的情況下装哆,流式處理系統(tǒng)應(yīng)該能夠提供一些機(jī)制來保存和更新狀態(tài)信息罐脊;

性能:延時(shí)應(yīng)盡可能的小,吞吐量應(yīng)盡可能的大蜕琴;

高級(jí)功能:事件時(shí)間處理萍桌,窗口等功能,這些均是流式處理在處理復(fù)雜需求時(shí)所需要的功能奸绷。流式處理可以分析連續(xù)的數(shù)據(jù)流梗夸,在這種方式中,數(shù)據(jù)被視為連續(xù)流号醉,處理引擎在很短的時(shí)間內(nèi) ( 幾毫米到幾分鐘 ) 內(nèi)取數(shù)反症、分析、以及響應(yīng)畔派。

流式處理的場景使用場景

異常檢測:流式處理可以應(yīng)用于連續(xù)的數(shù)據(jù)流并近乎實(shí)時(shí)的檢測異常铅碍。例如,在金融交易數(shù)據(jù)中线椰,欺詐性交易可以被視為異常胞谈,流式處理可以檢測到這些,保護(hù)銀行和客戶免受財(cái)務(wù)損失憨愉。

業(yè)務(wù)流程監(jiān)控:業(yè)務(wù)流程涉及特定域中的多個(gè)事件烦绳。例如,在電子商務(wù)業(yè)務(wù)中配紫,從下單径密、支付、出庫躺孝、送貨享扔、再到用戶簽收的所有事件都可以被視為一個(gè)業(yè)務(wù)流程底桂。流處理可用于監(jiān)控此類流程的異常情況,例如在時(shí)間范圍內(nèi)為完成惧眠、交付商品時(shí)出錯(cuò)等籽懦。

告警:流式處理可用于根據(jù)指定規(guī)則觸發(fā)告警,滿足特定條件氛魁,可以實(shí)時(shí)將告警發(fā)送到不同的目標(biāo)暮顺。


Spark

Spark 已成為批處理中 Hadoop 的真正繼承者,也是第一個(gè)完美支持 Lambda 架構(gòu)的框架呆盖。 Spark 受歡迎度極高拖云,成熟并且廣泛使用。 Spark 免費(fèi)提供 SparkStreaming应又,它使用微批處理進(jìn)行流式傳輸宙项。在 Spark2.0 之后,添加了許多優(yōu)秀的功能 ( 例如對(duì)tungsten株扛、watermarks尤筐、event time 處理的支持 ) ,同時(shí)結(jié)構(gòu)化流也更加抽象洞就,截止本篇博客 Spark 發(fā)布的可用版本為2.4.3盆繁,可以在最新版本中在微批處理和連續(xù)流模式之間進(jìn)行切換。

微批處理 & 連續(xù)流處理

結(jié)構(gòu)化流式傳輸默認(rèn)采用微批處理執(zhí)行旬蟋,Spark 流式計(jì)算引擎會(huì)定時(shí)檢查流數(shù)據(jù)油昂。在連續(xù)流處理中,Spark 不會(huì)啟動(dòng)定時(shí)任務(wù)倾贰,而是啟動(dòng)一組長時(shí)間運(yùn)行的任務(wù)冕碟,這些任務(wù)可以連續(xù)讀取、處理匆浙、寫入數(shù)據(jù)安寺。

微批處理中,驅(qū)動(dòng)程序通過將記錄 Offset 保存到預(yù)寫 Log 來檢測進(jìn)度,然后可以使用該 Log 重新進(jìn)行查詢。需要注意的是胶逢,在微批處理處理開始之前,需要在下一個(gè)微批處理中處理的范圍 Offset 保存到 Log 中迎捺,以便獲取確定性的重新執(zhí)行和端到端語義。因此查排,源記錄可能需要等待當(dāng)前的微批處理處理完成凳枝,然后記錄其 Offset 。連續(xù)流處理中雹嗦,通過完善和改進(jìn)算法來檢測查詢進(jìn)度范舀,特殊標(biāo)記的記錄被寫入到每個(gè)任務(wù)的輸入數(shù)據(jù)流中。當(dāng)任務(wù)遇到標(biāo)記時(shí)了罪,任務(wù)會(huì)異步報(bào)告處理的最后一個(gè) Offset 锭环,一旦驅(qū)動(dòng)程序收到寫入接收器的所有任務(wù)的 Offset ,它就會(huì)將它們寫入預(yù)寫 Log 中泊藕。由于 Checkpoint 完全異步辅辩,因此任務(wù)可以不間斷的繼續(xù),并提供一致的毫秒級(jí)延時(shí)娃圆。

Streaming

對(duì)于 Spark Streaming 來說玫锋,當(dāng)不同的數(shù)據(jù)來源輸入進(jìn)來時(shí),基于固定的時(shí)間間隔讼呢,會(huì)形成一系列固定不變的數(shù)據(jù)集或者事件集 ( 例如 Kafka撩鹿、Flume 等 ) 。這正好和SparkRDD 基于固定的數(shù)據(jù)集吻合悦屏,從每一個(gè)批處理來看节沦,空間維度的 RDD 依賴關(guān)系一致,不同的是這4個(gè)批處理輸入的數(shù)據(jù)規(guī)模和數(shù)據(jù)內(nèi)容不同础爬,所以生成的 RDD 依賴關(guān)系實(shí)例不一樣甫贯。

Spark的優(yōu)勢

支持 Lambda,且在 Spark 中免費(fèi)使用

高吞吐量看蚜,適用于不需要子延時(shí)的用例

容錯(cuò)性叫搁,默認(rèn)使用微批處理

高度抽象的API

社區(qū)活躍度高

支持Exactly Once

Spark的不足

不是真正意義上的實(shí)時(shí)計(jì)算,不能夠滿足低延時(shí)需求

需要調(diào)整的參數(shù)太多供炎,很難做到全面

在許多高級(jí)功能中落后于Flink


Flink

Flink 是一個(gè)開源的實(shí)時(shí)計(jì)算引擎渴逻,是實(shí)時(shí)計(jì)算領(lǐng)域的領(lǐng)導(dǎo)者。它擁有出色的圖計(jì)算和機(jī)器學(xué)習(xí)功能碱茁,其底層支持 On YARN 模式裸卫,且提供了本地 & 分布式模式,以及Docker & Kubernetes 等容器部署纽竣。像Spark一樣墓贿,它也支持 Lambda ,但實(shí)現(xiàn)與 Spark 完全相反蜓氨。Flink本質(zhì)上是一個(gè)真正的實(shí)時(shí)計(jì)算引擎聋袋,將批處理作為有限數(shù)據(jù)流的特殊情況。雖然兩個(gè)計(jì)算框架中的 API 相似穴吹,但它們?cè)趯?shí)現(xiàn)中沒有任何相似之處幽勒,在 Flink 中,Map港令、 Filter啥容、Reduce 等各個(gè)函數(shù)實(shí)現(xiàn)為長時(shí)間運(yùn)行的運(yùn)算符 ( 類似于 Storm 中的Bolt ) 锈颗。

如何使用 Flink 解決問題

在低延時(shí)場景,需要實(shí)時(shí)數(shù)據(jù)咪惠,以便能夠更快的檢測和解決關(guān)鍵事件击吱。例如,在使用 Flink之前遥昧,計(jì)算的基本業(yè)務(wù)指標(biāo)覆醇,實(shí)現(xiàn)的延時(shí)時(shí)間約為3到4小時(shí),這意味著炭臭,如果工程師在早上 10點(diǎn)左右檢測到業(yè)務(wù)指標(biāo)變化異常永脓,只能在下午 14 點(diǎn)左右開始排查。如果能夠立馬解決鞋仍,則只能在下午18左右時(shí)來驗(yàn)證解決方案常摧,這樣實(shí)現(xiàn)起來效率不是很高。假如你的業(yè)務(wù)數(shù)據(jù)是基于時(shí)間序列的威创,那么我們需要使用事件時(shí)間來處理在時(shí)間窗口內(nèi)對(duì)業(yè)務(wù)指標(biāo)進(jìn)行分組排宰。同時(shí),F(xiàn)link 也可以很輕松的與存儲(chǔ)在 Kafka 和 HDFS 中的業(yè)務(wù)數(shù)據(jù)進(jìn)行集成那婉。另外Flink具有良好的非功能特性板甘,便于在生產(chǎn)中運(yùn)行,易于與不同的監(jiān)控后端集成 ( 例如 Graphite详炬、Prometheus 等 ) 盐类,以及提供良好的 UI 界面。此外呛谜,F(xiàn)link 工作的快速開發(fā)周期以及簡單的執(zhí)行模型使得學(xué)習(xí)曲線平穩(wěn)在跳,開發(fā)效率高。Flink 相比較 SparkStreaming 不僅提供了更低的延時(shí)隐岛,而且 Flink 還對(duì)窗口和事件時(shí)間提供了更好的支持猫妙。


總結(jié)

SparkStreaming 通過小批量的方式保證了吞吐的情況下,同時(shí)提供了 ExactlyOnce 語義聚凹,但是不是嚴(yán)格意義上的實(shí)時(shí)割坠,而且由于微批處理的方式,對(duì)窗口和事件時(shí)間的支持比較有限妒牙。Flink 采用分布式快照的方式實(shí)現(xiàn)了一個(gè)高吞吐彼哼、低延時(shí),并且支持 ExactlyOnce 的實(shí)時(shí)計(jì)算引擎湘今,同時(shí) Flink的實(shí)時(shí)計(jì)算引擎也能更好支持窗口和事件時(shí)間敢朱。

在某些場景下Flink確實(shí)優(yōu)于Spark,但完全替代是不可能的,沒有最好的技術(shù)只有最合適的技術(shù)拴签,現(xiàn)實(shí)中往往需要結(jié)合實(shí)際的項(xiàng)目需求孝常、業(yè)務(wù)場景、以及技術(shù)儲(chǔ)備來選取最適合的計(jì)算引擎蚓哩。2790264852歡迎用CDH的小伙伴來找我玩

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茫因,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杖剪,更是在濱河造成了極大的恐慌,老刑警劉巖驰贷,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盛嘿,死亡現(xiàn)場離奇詭異,居然都是意外死亡括袒,警方通過查閱死者的電腦和手機(jī)次兆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锹锰,“玉大人芥炭,你說我怎么就攤上這事∈鸦郏” “怎么了园蝠?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痢士。 經(jīng)常有香客問我彪薛,道長,這世上最難降的妖魔是什么怠蹂? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任善延,我火速辦了婚禮,結(jié)果婚禮上城侧,老公的妹妹穿的比我還像新娘易遣。我一直安慰自己,他們只是感情好嫌佑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布豆茫。 她就那樣靜靜地躺著,像睡著了一般屋摇。 火紅的嫁衣襯著肌膚如雪澜薄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天摊册,我揣著相機(jī)與錄音肤京,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忘分,可吹牛的內(nèi)容都是我干的棋枕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼妒峦,長吁一口氣:“原來是場噩夢啊……” “哼重斑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肯骇,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤窥浪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后笛丙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漾脂,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年胚鸯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骨稿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡姜钳,死狀恐怖坦冠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哥桥,我是刑警寧澤辙浑,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拟糕,受9級(jí)特大地震影響例衍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜已卸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一佛玄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧累澡,春花似錦梦抢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕊梧,卻和暖如春霞赫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肥矢。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工端衰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叠洗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓旅东,卻偏偏與公主長得像灭抑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抵代,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355