概要
參考: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ū)更新具有一定保障。


