另一個(gè)優(yōu)化是對(duì)批處理任務(wù)進(jìn)行分解,這樣即可在需要的時(shí)候調(diào)用不同階段和組件。借此Flink可以與集群的其他用戶更好地共存。對(duì)任務(wù)提前進(jìn)行分析使得Flink可以查看需要執(zhí)行的所有操作、數(shù)據(jù)集的大小,以及下游需要執(zhí)行的操作步驟,借此實(shí)現(xiàn)進(jìn)一步的優(yōu)化。
優(yōu)勢和局限
Flink目前是處理框架領(lǐng)域一個(gè)獨(dú)特的技術(shù)。雖然Spark也可以執(zhí)行批處理和流處理,但Spark的流處理采取的微批架構(gòu)使其無法適用于很多用例。Flink流處理為先的方法可提供低延遲,高吞吐率,近乎逐項(xiàng)處理的能力。
Flink的很多組件是自行管理的。雖然這種做法較為罕見,但出于性能方面的原因,該技術(shù)可自行管理內(nèi)存,無需依賴原生的Java垃圾回收機(jī)制。與Spark不同,待處理數(shù)據(jù)的特征發(fā)生變化后Flink無需手工優(yōu)化和調(diào)整,并且該技術(shù)也可以自行處理數(shù)據(jù)分區(qū)和自動(dòng)緩存等操作。
Flink會(huì)通過多種方式對(duì)工作進(jìn)行分許進(jìn)而優(yōu)化任務(wù)。這種分析在部分程度上類似于SQL查詢規(guī)劃器對(duì)關(guān)系型數(shù)據(jù)庫所做的優(yōu)化,可針對(duì)特定任務(wù)確定最高效的實(shí)現(xiàn)方法。該技術(shù)還支持多階段并行執(zhí)行,同時(shí)可將受阻任務(wù)的數(shù)據(jù)集合在一起。對(duì)于迭代式任務(wù),出于性能方面的考慮,F(xiàn)link會(huì)嘗試在存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)上執(zhí)行相應(yīng)的計(jì)算任務(wù)。此外還可進(jìn)行“增量迭代”,或僅對(duì)數(shù)據(jù)中有改動(dòng)的部分進(jìn)行迭代。
在用戶工具方面,F(xiàn)link提供了基于Web的調(diào)度視圖,借此可輕松管理任務(wù)并查看系統(tǒng)狀態(tài)。用戶也可以查看已提交任務(wù)的優(yōu)化方案,借此了解任務(wù)最終是如何在集群中實(shí)現(xiàn)的。對(duì)于分析類任務(wù),F(xiàn)link提供了類似SQL的查詢,圖形化處理,以及機(jī)器學(xué)習(xí)庫,此外還支持內(nèi)存計(jì)算。
Flink能很好地與其他組件配合使用。如果配合Hadoop 堆棧使用,該技術(shù)可以很好地融入整個(gè)環(huán)境,在任何時(shí)候都只占用必要的資源。該技術(shù)可輕松地與YARN、HDFS和Kafka 集成。在兼容包的幫助下,F(xiàn)link還可以運(yùn)行為其他處理框架,例如Hadoop和Storm編寫的任務(wù)。
目前Flink最大的局限之一在于這依然是一個(gè)非常“年幼”的項(xiàng)目?,F(xiàn)實(shí)環(huán)境中該項(xiàng)目的大規(guī)模部署尚不如其他處理框架那么常見,對(duì)于Flink在縮放能力方面的局限目前也沒有較為深入的研究。隨著快速開發(fā)周期的推進(jìn)和兼容包等功能的完善,當(dāng)越來越多的組織開始嘗試時(shí),可能會(huì)出現(xiàn)越來越多的Flink部署。
總結(jié)
Flink提供了低延遲流處理,同時(shí)可支持傳統(tǒng)的批處理任務(wù)。Flink也許最適合有極高流處理需求,并有少量批處理任務(wù)的組織。該技術(shù)可兼容原生Storm和Hadoop程序,可在YARN管理的集群上運(yùn)行,因此可以很方便地進(jìn)行評(píng)估。快速進(jìn)展的開發(fā)工作使其值得被大家關(guān)注。
結(jié)論
大數(shù)據(jù)系統(tǒng)可使用多種處理技術(shù)。
對(duì)于僅需要批處理的工作負(fù)載,如果對(duì)時(shí)間不敏感,比其他解決方案實(shí)現(xiàn)成本更低的Hadoop將會(huì)是一個(gè)好選擇。
對(duì)于僅需要流處理的工作負(fù)載,Storm可支持更廣泛的語言并實(shí)現(xiàn)極低延遲的處理,但默認(rèn)配置可能產(chǎn)生重復(fù)結(jié)果并且無法保證順序。Samza與YARN和Kafka緊密集成可提供更大靈活性,更易用的多團(tuán)隊(duì)使用,以及更簡單的復(fù)制和狀態(tài)管理。
對(duì)于混合型工作負(fù)載,Spark可提供高速批處理和微批處理模式的流處理。該技術(shù)的支持更完善,具備各種集成庫和工具,可實(shí)現(xiàn)靈活的集成。Flink提供了真正的流處理并具備批處理能力,通過深度優(yōu)化可運(yùn)行針對(duì)其他平臺(tái)編寫的任務(wù),提供低延遲的處理,但實(shí)際應(yīng)用方面還為時(shí)過早。
最適合的解決方案主要取決于待處理數(shù)據(jù)的狀態(tài),對(duì)處理所需時(shí)間的需求,以及希望得到的結(jié)果。具體是使用全功能解決方案或主要側(cè)重于某種項(xiàng)目的解決方案,這個(gè)問題需要慎重權(quán)衡。隨著逐漸成熟并被廣泛接受,在評(píng)估任何新出現(xiàn)的創(chuàng)新型解決方案時(shí)都需要考慮類似的問題。