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月