Storm快速理解

jopen 10年前發布 | 16K 次閱讀 Storm 分布式/云計算/大數據

==是什么 ==

 

目標Scope(解決什么問題)

分布式實時大規模數據流的處理

 

官方定義

Stormis a distributed realtime computation system,Storm exposes a set of primitives for doing realtime computation

 

個人理解

Storm所說的Realtime,個人理解不是強調批量數據處理的快速和隨機性,而更多的是強調對實時數據流的連續處理(Stream),相對的概念是HadoopMapReduce框架的Batch處理模式,是一個分布式的Stream模式的數據處理框架。

 

==實現 ==

 

Feature

 

continuousprocesson data streams :連續的數據流處理,Storm之所以為Storm的根本了。

 

Scalable :一方面,Storm集群的大小規模的伸縮性很好,另一方面,對于一個正在運行的Topology,可以動態的改變它的并發度,動態的增減Workerthread, task等。

 

Guarantees no data loss :主要體現為數據處理流程中的Ack機制,用來重新加載處理失敗的數據流。

 

Extremely robust/Fault-tolerant :總之就是魯棒性,容錯性好。個人理解主要是緣于Nimbus daemon Supervisor daemons fail-fast和無狀態的(所有的狀態都保存在Zookeeper或本地磁盤中),因此Daemon可以快速的重啟和恢復。

 

Programming language agnostic :支持多語言編程,個人理解就是使用thrift生成server/Client/Topology的各個組件的接口,可以使用多種語言去具體實現。

 

核心思路,架構

 

Storm處理數據的基本單位是Tuple,也就是一個通用的數據容器,支持一些基本數據類型和自定義類型。在StormTopology中流動的是由不限定數目的Tuple組成的數據流(Stream

 

Storm快速理解

 

Tuple數據流在Topology中傳遞處理,所謂的Topology實際上就是由各種數據處理節點鏈接成的數據處理鏈,和絕大多數流數據處理框架很類似,比如處理多媒體數據的Gstreamer等。 Spout節點生成Tuple數據流,各種Bolt節點處理轉換并輸出Tuple流。

 

Storm快速理解

 

Cluster集群的角度來看,和多數分布式數據處理系統一樣,由任務監督分配和數據處理兩部分組成。NimBus Daemon負責分發任務監控狀態等,Supervisor Daemon負責實際執行Topology

Storm快速理解

 

 

從結構上說,Storm提供的就是一個搭建數據處理鏈,協調數據流動,方便動態水平擴展集群的一個面向Stream的分布式數據處理框架。至于這個框架具體如何獲取和處理Stream數據,各種Input, Output, FilterJoinAggregation邏輯完全取決于具體SpoutBolt的實現。

  

適用領域

 

總體而言,Storm針對的是實時連續數據流的持續處理。其Realtime概念并不側重于本身處理數據的效率有多高。相反,個人覺得為了其拓撲結構的靈活性,數據在多層鏈接的SpoutBolt中流動的時候必然帶來一定的額外數據傳輸開銷,此外其保證數據處理魯棒性的Ack機制也必然帶來額外的性能損失。所以純粹論數據的高效處理,不是Storm的強項。數據的連續及時處理才是Storm的強項和適用領域。常見的應用包括各種實時數據/LOG等的預處理,過濾,統計,持久化,實時狀態的監控分析等

 

細節

可以指定各個Bolt處理節點的并發度,便于靈活調度任務

 

==相關項目 ==

 

上下游項目

 

Trident

 

Trident實際是Storm代碼的一部分,是構建在Storm框架上的一個更高Level的抽象。本質上說,就是在StormStream處理模式上,用SpoutBolt實現了一些常見的業務邏輯的支持如Join/Filter/Aggregation/Grouping等,讓開發者更方便的使用Storm

 

各種 spout實現 :https://github.com/nathanmarz/storm/wiki/Spout-implementations 如何從各種外部系統獲取Tuple數據流供Storm處理,當然取決于各種Spout的實現。

 

類似項目

 

S4 http://incubator.apache.org/s4/ S4 is a general-purpose, distributed,scalable, fault-tolerant, pluggable platform that allows programmers to easilydevelop applications for processing continuous unbounded streams of data. 看起來和StormScope完全一致。 從實現上看大概在集群的動態性上的支持較差,此外不支持可靠的處理數據,可能丟失事件(這個可能不能說是BUG或缺失,大概是設計思路上的不同)

 

Borealis:http://www.cs.brown.edu/research/borealis/public/not active any more since 2008.

 

==相關文獻 ==

 

http://storm-project.net/ 項目主頁

https://github.com/nathanmarz/storm/wiki 項目文檔

 

Design文檔

https://github.com/nathanmarz/storm/wiki/Concepts 主要概念

https://github.com/nathanmarz/storm/wiki/Implementation-docs 內部實現文檔

 

==其它 ==

 

Storm的實現除了Java,還使用了Clojure這個類Lisp語言。


來自:http://blog.csdn.net/colorant/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!