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 mqnative library,容易有兼容性問題,而netty作為java開發的,並且性能是zero mq2倍(在2013年的時候)。

 

0.9.2

改進了netty的使用,更好的利用線程、CPU和網絡資源,以提高更好的性能。

改善了UI,提供了REST接口,圖形化的DAG圖。

整合的Kafka Spout

 

0.9.3

改進的kafka connector,同時支持hdfs integrationhbase Integration

通過shaded,解決了用戶包和storm包的依賴衝突,比如thriftnettyguavahttpClientzkcurator

 

0.9.40.9.50.9.6都是bugfix版本。

 

0.10.0

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

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

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

下游整合,支持redis,支持jdbc

 

1.0.02016

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

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

分佈式緩存,支持通過supervisorhdfs來提供數據分發,用戶不用重啟作業來更新數據,只需要在命令行操作即可。

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

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

狀態支持,支持自動的checkpoint,狀態可以被保存在內存或者redis中。

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

資源感知調度,通過插件化的storm的調度插件,目前可以支持對內存和cpu的單獨設置。

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

動態worker profiling,支持在ui上操作workerheap dumpjstack outpuJProfile recording,相應的文件會被保存並可以下載。

 

1.0.11.0.21.0.31.0.41.0.51.0.6都是bugfix版本,無重大功能。

 

1.1.020173

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

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

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

其他整合,支持druidopenTsdbaws kinesis,以及hdfs spout

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

 

1.1.11.1.21.1.3,都是bugfix版本,無重大功能。

 

1.2.020182

新的metric彙報,storm提供reporter彙報metricgangliagraphitejmxcsv以及console

 

1.2.11.2.21.2.3,都是bugfix版本,無重大功能。

 

2.0.020195

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

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

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

 

2.1.0201910

2.2.020206

 

Tags: