根據(jù)StackOverflow15年的回答,大意是Storm和Flink的主要差距在于high-level API抽象得更好( 包括window機(jī)制、自定義節(jié)點(diǎn)狀態(tài)), 一致性保證實(shí)現(xiàn)得更輕量。三年過去了,現(xiàn)在Storm和Flink的主要差異在哪里?本文試圖從流處理的內(nèi)部機(jī)制和運(yùn)維能力方面概括他們的異同,本文是Storm和Flink差異的開篇,在后續(xù)的文章中會(huì)選一些核心功能來詳細(xì)對(duì)比實(shí)現(xiàn)上的差異。
內(nèi)部實(shí)現(xiàn)方面:
- 高級(jí)API: 在storm 1.0.x版本中,storm trident已經(jīng)支持StormSQL,但在最新版本1.2.2中仍然被標(biāo)注為試驗(yàn)階段。Flink提供了Batch API,相當(dāng)于Storm的Trident。
- Window機(jī)制實(shí)現(xiàn):Flink和Storm都支持事件時(shí)間和處理時(shí)間, 都支持tumbing window和sliding window。
- Backpressure: 由于內(nèi)部通信機(jī)制的不同,Storm和Flink的back pressure實(shí)現(xiàn)依然差異較大。Storm可以通過限制吞吐和隊(duì)列高低水位兩種方式實(shí)現(xiàn)backpressure。在實(shí)踐過程中,我們使用隊(duì)列高低水位backpressure時(shí)遇到了storm backpressure機(jī)制導(dǎo)致spout停止發(fā)送數(shù)據(jù)的問題,從STORM-1949看,似乎1.0.3+ 和1.1.0+有修復(fù)。比起Flink,Flink通過網(wǎng)絡(luò)緩存高低水位和Buffer隊(duì)列阻塞的方式實(shí)現(xiàn)backpressure。Storm可以通過metric日志查看歷史所有的backpressure情況。Flink沒有記錄歷史的backpressure, 但可以在Dashboard實(shí)時(shí)觀察backpressure情況。
- Exactly-once保證: 從原理上來說,Strom和Flink的實(shí)現(xiàn)類似。都是基于分布式快照和兩階段提交協(xié)議,都需要上游可重播。 不同點(diǎn)在于,F(xiàn)link的Stream和Batch都支持分布式快照,而Storm只有Trident API支持。
- 用戶自定義的節(jié)點(diǎn)狀態(tài): storm和Flink都支持用戶自定義節(jié)點(diǎn)狀態(tài), Flink支持in-memory , 本地磁盤, RocksDB而storm支持hbase和in-memory和redis作為狀態(tài)的存儲(chǔ)backend。
運(yùn)維方面:
- metric管理:Flink的metric管理比storm更友好,支持所有metric查看、搜索及可視化 ,Storm UI只提供部分系統(tǒng)metric的查看且不支持可視化。Flink的metric支持JMX、Promethes、Graphite、StatsD、DataDog、Slf4j輸出,而Storm支持日志輸出或通過HTTP發(fā)送(格式不能自定義)。
- 日志查看:Flink dashboard提供日志查看。 storm提供了logviewer組件,但是STORM-3238提到logviewer存在bug,實(shí)際無法查看日志結(jié)果,這個(gè)bug至今未修復(fù)。
- Resource Mangement System支持: storm支持yarn,mesos。但storm on yarn已經(jīng)幾年沒更新,storm mesos在不同的github repository,最近一次更新在4個(gè)月前,看起來并不活躍。Flink on yarn和mesos上一次更新皆為一個(gè)月內(nèi)。(于2018.12.4觀察)
- 調(diào)度機(jī)制: standalone模式下,Storm默認(rèn)優(yōu)先分配空閑slot最多的機(jī)器節(jié)點(diǎn)。支持多種分配機(jī)制(筆者偷懶,還沒細(xì)看) 。Flink的task->slot分配只有一種機(jī)制,支持用戶自定義slot group。
Storm在高級(jí)API層面上相對(duì)Flink落后,但不可否認(rèn)的是,Storm在努力讓差距變小。在hadoop生態(tài)支持上,storm似乎沒有進(jìn)展,而JStorm也半年未更新。Strom和JStorm也未合并完成,合并進(jìn)度見cf。而在運(yùn)維方面,storm的進(jìn)展緩慢。