storm原理寫得比較好的文章

 Storm擁有低延遲、高性能、分佈式、可擴展、容錯等特性,能夠保證消息不丟失,消息處理嚴格有序。Storm的主要特色以下所示:數據庫

    • 簡單的編程模型。相似於MapReduce下降了並行批處理複雜性,Storm下降了進 行實時處理的複雜性。
    • 可使用各類編程語言。你能夠在Storm之上使用各類編程語言。默認支持Clojure、 Java、Ruby和Python。要增長對其餘語言的支持,只需實現一個簡單的Storm通訊協議便可。
    • 容錯性。Storm會管理工做進程和節點的故障。
    • 水平擴展。計算是在多個線程、進程和服務器之間並行進行的。
    • 可靠的消息處理。Storm保證每一個消息至少能獲得一次完整處理。任務失敗時,它 會負責從消息源重試消息。
    • 快速。系統的設計保證了消息能獲得快速的處理,使用ØMQ做爲其底層消息隊列。
    • 本地模式。Storm有一個「本地模式」,能夠在處理過程當中徹底模擬Storm集羣。 這讓你能夠快速進行開發和單元測試。

  Storm集羣由一個主節點多個工做節點組成。主節點運行了一個名爲「Nimbus」的守護進程,用於分配代碼、佈置任務及故障檢測。每一個工做節點都運行了一個名爲「Supervisor」的守護進程,用於監聽工做,開始並終止工做進程。Nimbus和Supervisor都能快速失敗,並且是無狀態的,這樣一來它們就變得十分健壯,二者的協調工做是由Apache ZooKeeper來完成的。編程

    

  

  圖1.1 Storm工做流程服務器

  第一步:客戶端提交拓撲到Nimbus。第二步:Nimbus針對該拓撲創建本地的目錄根據topology的配置計算task,分配task,在zookeeper上創建assignments節點存儲task和supervisor機器節點中woker的對應關係。第三步:在zookeeper上建立taskbeats節點來監控task的心跳,啓動topology。第四步:Supervisor去zookeeper上獲取分配的tasks,啓動多個woker進行,每一個woker生成task,一個task一個線程;根據topology信息初始化創建task之間的鏈接;Task和Task之間是經過ZeroMQ管理的;後整個拓撲運行起來。網絡

  Storm的術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的數據。Sprout是數據源。Bolt處理數據。Task是運行於Spout或Bolt中的線程。Worker是運行這些線程的進程。Stream Grouping規定了Bolt接收什麼東西做爲輸入數據。數據能夠隨機分配(術語爲Shuffle),或者根據字段值分配(術語爲Fields),或者 廣播(術語爲All),或者老是發給一個Task(術語爲Global),也能夠不關心該數據(術語爲None),或者由自定義邏輯來決定(術語爲Direct)。Topology是由Stream Grouping鏈接起來的Spout和Bolt節點網絡。編程語言

  能夠和Storm相提並論的系統有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。二者最大的區別在於Storm會保證消息獲得處理。這些系統中有的擁有內建數據存儲層,這是Storm所沒有的,若是須要持久化,可使用一個相似於Cassandra或Riak這樣的外部數據庫。分佈式

相關文章
相關標籤/搜索