Storm介紹之概念

什么是實時流計算?

?????? 主要的處理模式可以分為:流處理,批處理

??????????????? 流處理是直接處理,有時也分為在線,離線,近線(straight-through process)

??????????????? 批處理是先存儲后處理(store-process)

實時的流計算系統(tǒng)

????? Yahoo的S4,S4是一個通用的,分布式的,可擴展的,分區(qū)容錯的,可插拔的流式系統(tǒng),主要是為了解決:搜索廣告的展現(xiàn)、處理用戶的點擊反饋

??? Facebook使用puma和hbase相結合來處理實時數(shù)據(jù),使批處理計算平臺具備一定實時計算能力,不過這不算是一個開源的產品,只是內部使用

Storm是什么?

?????? storm是一個分布式,高容錯的實時計算系統(tǒng),對數(shù)據(jù)實時計算提供了簡單的spout和bolt原語

架構

??????????????????????

核心組件

????????? Storm的內核都是由clojure編寫的(大部分擴展工作都是java編寫的)

??????????? Nimbus:負責資源分配和任務調度

?????????? Supervisor:負責接收nimbus分配的任務,啟動和停止屬于自己管理的worker進程

?????????? Worker:運行具體處理組件邏輯的進程,每個Worker都屬于一個特定的Topology,每個supervisor節(jié)點的worker進程有多個,每個worker使用一個單獨的端口,worker對Topology中的每個組件運行一個或多個Executor線程來提供Task的執(zhí)行服務

????????? Topology:storm中運行的一個實時應用程序,類似于網絡拓撲圖的一種虛擬結構.Storm拓撲類似MapReduce任務,一個關鍵的區(qū)別是MapReduce任務運行一段時間后最終會完成,而Storm拓撲一直會運行(直到殺死它),一個Topology是由一組spout組件和Bolt組件組成的圖

????????? Spout:在一個Topology中產生源數(shù)據(jù)的組件,向Topology中發(fā)出的Tuple可以是可靠的,也可以是不可靠的,一個可靠的數(shù)據(jù)源可以重新發(fā)射一個Tuple(如果該Tuple沒有被Storm成功處理),但是一個不可靠的消息源Spout一旦發(fā)出,一個Tuple就把它徹底"遺忘",也就不可能再發(fā)了

????? ?? Bolt:消息的處理者,在一個Topology中接收數(shù)據(jù)然后執(zhí)行處理的組件

??????????????? Bolt的生命周期:首先客戶端創(chuàng)建Bolt,然后將其序列化,并提交給集群中的主機,之后集群啟動Worker進程,反序列化Bolt,調用prepare方法開始處理元組,接下來,Bolt處理Tuple,Bolt處理一個輸入Tuple,發(fā)射0個或多個Tuple,然后調用ack通知Storm自己已經處理過這個Tuple了,Storm提供了一個IBasicBolt自動調用ack,Bolt類接收由Spout或者其他上游Bolt類發(fā)來的Tuple,對其進行處理

??????? Tuple:一次消息傳遞的基本單元

?????????????? Tuple的生命周期:storm 通過調用spout的nextTuple方法來獲取下一個Tuple,Spout通過open方法參數(shù)里面提供的SpoutOutputCollector來發(fā)射新tuple到它的其中一個輸出消息流,發(fā)射tuple的時候spout會提供一個message-id,后面我們會通過這個tuple-id來追蹤這個tuple

?????????????????? 然后,這個發(fā)射的tuple被傳送到消息處理者Bolt那里,storm會跟蹤這個消息的樹形結構是否創(chuàng)建,根據(jù)message-id調用spout那里的ack函數(shù),以確認tuple是否被完全處理,如果tuple超時就會調用spout的fail方法

????????????????? 由此看出同一個tuple不管是acked還是fail都是由創(chuàng)建它的那個spout發(fā)出的,所以即使spout在集群環(huán)境中執(zhí)行了很多的task,這個tuple也不會被其他任務調用或生成acked或failed狀態(tài),總之,Storm會利用內部的Acker機制保證每個Tuple被可靠地處理,最后,在任務完成后,Spout調用Close方法結束Tuple的使命

???????? Executor:

??????????????? 產生于Worker進程內部的線程,會執(zhí)行同一個組件的一個或者多個Task

?????? Task:worker中的每一個spout/bolt的線程稱為一個Task

?????? Stream grouping:消息的分組方法

???? ? Worker、Task、Executor三者之間的關系:

????????????????? Worker是進程,Executor對應于線程,Spout或Bolt是一個個的Task;在Storm集群中的一個物理節(jié)點啟動一個或者多個worker進程,集群中的Topology都是通過這些Worker進程進行的,Worker進程中又會運行一個或多個executor線程,每個Executor線程只運行一個Topology的一個組件(Spout/Bolt)的Task任務,Task又是數(shù)據(jù)處理的實體單元

?????????????????? 同一個Worker只執(zhí)行同一個Topology相關的Task;在同一個Executor中可以執(zhí)行多個同類型的Task,即在同一個Executor中,要么全部都是Bolt類的Task,要么全是Spout類的Task;在運行時,Spout和Bolt需要包裝成一個又一個的Task

?????????????????????

與hadoop角色對比

? ? ? ? ? ? ???

Storm數(shù)據(jù)交互圖

??????????????

Topology的提交流程圖

?????????????????


數(shù)據(jù)流模型

????? Topology中,Spout是Stream的源頭,負責為Topology從特定數(shù)據(jù)源發(fā)射Stream;Bolt可以接收任意多個Stream作為輸入,然后進行數(shù)據(jù)的加工處理過程,如果需要,Bolt還可以發(fā)射出新的Stream給下級Bolt進行處理

???????????

????? Stream消息流:Stream消息流是一個有向無界的Tuple序列,這些Tuple以分布式的方式并行地創(chuàng)建和處理,定義消息流主要是定義消息流的Tuple

???? Stream:源源不斷傳遞地tuple就組成了stream

???? Stream Grouping 消息流

????????????? Stream Grouping(消息流組)就是用來定義一個流如何分配Tuple到Bolt.Storm包括6種流分組類型

??????????????? 1.隨機分組(shuffle Grouping)

?????????????????? 隨機分發(fā)Tuple到Bolt的任務,保證每個任務獲得相等數(shù)量的Tuple

??????????????? 2.字段分組(Fields Grouping)

??????????????????? 根據(jù)指定字段分割數(shù)據(jù)流,并分組.這種grouping機制保證相同field值的tuple會去同一個task.例如對于WordCount來說同一個單詞會去同一個task

??????????????? 3.全部分組(AllGrouping)

???????????????????? 廣播發(fā)送,將每一個Tuple發(fā)送到所有的Task.謹慎使用

?????????????? 4.全局分組(GlobalGrouping)

??????????????????? 所有的Tuple會被發(fā)送到某個Bolt中id最小的那個task

????????????? 5.無分組(NoneGrouping)

????????????????? 不關心Tuple發(fā)送給哪個Task來處理,等價于ShuffleGrouping

????????????? 6.直接分組(DirectGrouping)

????????????????? 直接將Tuple發(fā)送到指定的Task來處理

特點

??????????? 分布式簡單

??????????? 運維簡單

??????????? 高度容錯

??????????? 無數(shù)據(jù)丟失

??????????? 多語言

??????????? 低延遲

???????? ?? 高性能

??????????? 可擴展


進入Storm安裝部署以及API:Storm安裝部署和API

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Storm入門系列之一:storm核心概念及特性 本文的將介紹一些 storm 入門的基礎知識,包括 storm ...
    zhaif閱讀 3,175評論 0 17
  • 目錄 場景假設 調優(yōu)步驟和方法 Storm 的部分特性 Storm 并行度 Storm 消息機制 Storm UI...
    mtide閱讀 17,195評論 30 60
  • 本文主要介紹storm中的基本概念,從基礎上了解strom的體系結構,便于后續(xù)編程過程中作為基礎指導。主要的概念包...
    看山遠兮閱讀 1,574評論 0 9
  • 這是一個JStorm使用教程,不包含環(huán)境搭建教程,直接在公司現(xiàn)有集群上跑任務,關于JStorm集群環(huán)境搭建,后續(xù)研...
    Coselding閱讀 6,448評論 1 9
  • 剛才寫了一篇讀后感,一直發(fā)布失敗,也就沒有了再寫一次的興趣。 陽陽借給我一本林徽因傳,預備開始看了。無聊的時候做的...
    瞳亻閱讀 315評論 0 1