Storm近年的發展

storm作為第一款大數據領域的流式計算引擎,在2013年推出之後風頭一時無二。後續雖然有spark streaming也作為流式計算的引擎,但storm依然在流式計算的江湖佔有穩定的地位。直到2017年,flink作為流式計算引擎異軍突起,幾年間,風雲突變,流計算言必談flink。

誠然,flink對比storm和spark streaming都有很多優勢,但作為早期storm的使用者,一直也很想了解storm這些年的發展。

通過梳理storm自己的發版說明,發現storm還是做了很多的事情,比如,支援sql,比如,支援狀態,再比如,storm竟然將開發語言從clojure改為了java,可見storm壯士斷腕的決心有多大。

但,一旦新的趨勢已經成型,則無力回天。目前storm還是能在一些細分領域有自己的一席之地,但流式計算的頭把交椅,則只能妄自垂憐了。

 

storm推出的第一個穩定版本是0.8版,下面從0.9版本看看storm都新增了哪些新的功能。1.0.0、1.1.0和2.0.0版本是幾個有重大功能的版本,不過總體上storm的發展已經很緩了,特別是相對flink而言。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

0.9

Storm將傳輸層變得可插拔,改變了原先只有zero mq的局面,可以設置為netty。因為zero mq是native library,容易有兼容性問題,而netty作為java開發的,並且性能是zero mq的2倍(在2013年的時候)。

 

0.9.2

改進了netty的使用,更好的利用執行緒、CPU和網路資源,以提高更好的性能。

改善了UI,提供了REST介面,圖形化的DAG圖。

整合的Kafka Spout。

 

0.9.3

改進的kafka connector,同時支援hdfs integration和hbase Integration。

通過shaded,解決了用戶包和storm包的依賴衝突,比如thrift,netty,guava,httpClient,zk和curator。

 

0.9.4和0.9.5、0.9.6都是bugfix版本。

 

0.10.0

安全和多租戶,支援kerberos,acl,ssl,以及與hadoop生態其他組件的安全整合,用戶的認證和資源隔離。

使用Flux聲明topology,相比以往需要以程式碼描述dag,目前可以單獨在文本中描述dag。

流式寫入hive,hive 0.13版本支援流式寫入,storm自己實現了一個bolt來流式寫入hive。

下游整合,支援redis,支援jdbc。

 

1.0.0,2016年

改進的性能,這個版本的storm比之前的版本要快16倍,延遲減少了60%,即使考慮不同的用戶場景和外部服務依賴,對大多數用戶場景而言也提供了相比之前3倍的性能。

心跳機制,引入pacemaker來實現server和worker之間的心跳,而不是之前通過zk來進行,當集群規模較大時,zk往往會成為瓶頸。

分散式快取,支援通過supervisor和hdfs來提供數據分發,用戶不用重啟作業來更新數據,只需要在命令行操作即可。

Nimbus HA,終於支援HA了,通過運行多個nimbus進程和選舉來實現HA。

原生窗口,支援滑動窗口和翻滾窗口,基於事件個數或者時間。

狀態支援,支援自動的checkpoint,狀態可以被保存在記憶體或者redis中。

背壓監測,之前為了控制spout的速度,只能設置topology.max.spout.pending,目前通過監測task的buffer size,可以動態的控制spout的發射速度。

資源感知調度,通過插件化的storm的調度插件,目前可以支援對記憶體和cpu的單獨設置。

元組抽樣和調試,之前用戶只能自己去顯式的增加調試資訊,等到上線時再去掉調試資訊,現在storm內嵌了抽樣調試功能,只需在UI上就可以操作,元組會被UI顯示並保存到磁碟。

動態worker profiling,支援在ui上操作worker的heap dump,jstack outpu和JProfile recording,相應的文件會被保存並可以下載。

 

1.0.1,1.0.2,1.0.3,1.0.4,1.0.5,1.0.6都是bugfix版本,無重大功能。

 

1.1.0,2017年3月

流式SQL,通過calcite,storm終於支援了sql,在命令行中利用storm sql操作。

Kafka整合,支援kafka 0.10及以後版本。

PMML支援,通過支援predictive model markup language來支援用訓練機器學習中的模型。

其他整合,支援druid,openTsdb,aws kinesis,以及hdfs spout。

Topology提交,之前只支援uber包提交,現在可以通過-jar來指定依賴提交。

 

1.1.1,1.1.2,1.1.3,都是bugfix版本,無重大功能。

 

1.2.0,2018年2月

新的metric彙報,storm提供reporter彙報metric到ganglia,graphite,jmx,csv以及console。

 

1.2.1,1.2.2,1.2.3,都是bugfix版本,無重大功能。

 

2.0.0,2019年5月

以Java進行重構,storm之前是用clojure寫成的,clojure語言成為很多人參加storm社區的障礙,從這裡之後,歡迎更多的人參與社區的程式碼貢獻。

更高的性能,通過重構更精簡的執行緒模型、極快的消息傳遞模型以及輕量級的背壓模型,它旨在突破吞吐量、延遲和能耗的界限,同時保持向後兼容性。Apache Storm 2.0 是第一個打破 1 微秒延遲障礙的流媒體引擎。

JVM要求,擯棄了之前的java7,從storm 2.0開始,要求使用java8的環境。

 

2.1.0,2019年10月

2.2.0,2020年6月

 

Tags: