主流流式計(jì)算框架比較:storm,spark,flink

概要

參考:https://blog.csdn.net/dingxiangtech/article/details/83022673
參考:https://blog.csdn.net/xiao_jun_0820/article/details/79825077

功能指標(biāo) Storm Spark Flink
處理模式 native micro-batching native
消息保障 至少一次 有且一次 有且一次
實(shí)時(shí)性 低延遲,亞秒級(jí) 高延遲,秒級(jí) 低延遲,亞秒級(jí)
吞吐量 高(Storm3-5倍)
流量控制 不支持 支持 支持
容錯(cuò)方式 record ack rdd based check point check point

native Vs micro-batching

參考:https://www.cnblogs.com/tgzhu/p/7119477.html

  • 原生流處理:指所有輸入的記錄一旦到達(dá)即會(huì)一個(gè)接著一個(gè)進(jìn)行處理。示例如下:

    • image
  • 微批處理:把輸入的數(shù)據(jù)按照某種預(yù)先定義的時(shí)間間隔(典型的是幾秒鐘)分成短小的批量數(shù)據(jù),流經(jīng)流處理系統(tǒng)。示例如下:

    • image

兩種方法都有其先天的優(yōu)勢(shì)和不足

  • 原生流處理的優(yōu)勢(shì)在于它的表達(dá)方式。數(shù)據(jù)一旦到達(dá)立即處理,這些系統(tǒng)的延遲性遠(yuǎn)比其它微批處理要好。除了延遲性外,原生流處理的狀態(tài)操作也容易實(shí)現(xiàn)。一般原生流處理系統(tǒng)為了達(dá)到低延遲和容錯(cuò)性會(huì)花費(fèi)比較大的成本,因?yàn)樗枰紤]每條記錄。原生流處理的負(fù)載均衡也是個(gè)問(wèn)題。比如,我們處理的數(shù)據(jù)按key分區(qū),如果分區(qū)的某個(gè)key是資源密集型,那這個(gè)分區(qū)很容易成為作業(yè)的瓶頸。

  • 微批處理。將流式計(jì)算分解成一系列短小的批處理作業(yè),也不可避免的減弱系統(tǒng)的表達(dá)力。像狀態(tài)管理或者join等操作的實(shí)現(xiàn)會(huì)變的困難,因?yàn)槲⑴幚硐到y(tǒng)必須操作整個(gè)批量數(shù)據(jù)。并且,batch interval會(huì)連接兩個(gè)不易連接的事情:基礎(chǔ)屬性和業(yè)務(wù)邏輯。相反地,微批處理系統(tǒng)的容錯(cuò)性和負(fù)載均衡實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單,因?yàn)槲⑴幚硐到y(tǒng)僅發(fā)送每批數(shù)據(jù)到一個(gè)worker節(jié)點(diǎn)上,如果一些數(shù)據(jù)出錯(cuò)那就使用其它副本。微批處理系統(tǒng)很容易建立在原生流處理系統(tǒng)之上。

主要原理

1 Apache Storm

在Storm中,需要先設(shè)計(jì)一個(gè)實(shí)時(shí)計(jì)算結(jié)構(gòu),我們稱(chēng)之為拓?fù)洌╰opology)。之后,這個(gè)拓?fù)浣Y(jié)構(gòu)會(huì)被提交給集群,其中主節(jié)點(diǎn)(master node)負(fù)責(zé)給工作節(jié)點(diǎn)(worker node)分配代碼,工作節(jié)點(diǎn)負(fù)責(zé)執(zhí)行代碼。在一個(gè)拓?fù)浣Y(jié)構(gòu)中,包含spout和bolt兩種角色。數(shù)據(jù)在spouts之間傳遞,這些spouts將數(shù)據(jù)流以tuple元組的形式發(fā)送;而bolt則負(fù)責(zé)轉(zhuǎn)換數(shù)據(jù)流。

2 Apache Spark

Spark Streaming,即核心Spark API的擴(kuò)展,不像Storm那樣一次處理一個(gè)數(shù)據(jù)流。相反,它在處理數(shù)據(jù)流之前,會(huì)按照時(shí)間間隔對(duì)數(shù)據(jù)流進(jìn)行分段切分。Spark針對(duì)連續(xù)數(shù)據(jù)流的抽象,我們稱(chēng)為DStream(Discretized Stream)。 DStream是小批處理的RDD(彈性分布式數(shù)據(jù)集), RDD則是分布式數(shù)據(jù)集,可以通過(guò)任意函數(shù)和滑動(dòng)數(shù)據(jù)窗口(窗口計(jì)算)進(jìn)行轉(zhuǎn)換,實(shí)現(xiàn)并行操作。

3 Apache Flink

官網(wǎng):https://flink.apache.org/

針對(duì)流數(shù)據(jù)+批數(shù)據(jù)的計(jì)算框架。把批數(shù)據(jù)看作流數(shù)據(jù)的一種特例,延遲性較低(毫秒級(jí)),且能夠保證消息傳輸不丟失不重復(fù)。

    • image.png

小結(jié)

Flink綜合評(píng)分高,適合以下場(chǎng)景:

  • 消息投遞語(yǔ)義為 Exactly Once
  • 高吞吐低延遲
  • 需要進(jìn)行狀態(tài)管理或窗口統(tǒng)計(jì)

ps:flink國(guó)內(nèi)用戶(hù):阿里巴巴/美團(tuán)/華為/滴滴/快手等,社區(qū)更新具有一定保障。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容