storm作為最流行的的實時流計算框架,提供了可容錯的分布式計算所要求的基本源語和保障機制
spout先從外部獲取資料,然後簡單的封裝成乙個個的tuple傳送到bolt,bolt處理後再將處理後的資料封裝成乙個個的tuple再傳送到下乙個bolt,直到最後乙個bolt處理完成
1. client向storm集群提交任務,將打包好的jar包提交到nimbus的nimbus/inbox目錄下
2. 為當前的topology分配乙個id,topology_uuid,然後建立好目錄nimbus/stormdist/topology_uuid,將jar包,topology物件的序列化檔案,以及topology的配置資訊放在這個目錄下
3. nimbus會根據提交的topology中的併發度(executors的數量)以及worker的數量,來給spout/bolt設定task的數目,並且分配對應的task_id,在這邊就指定好了哪乙個task執行spout,哪乙個task執行哪乙個bolt,並記錄了下來
下面是通過jstorm(由於strom是使用clojure編寫的,我們需要跟蹤原始碼的時候比較困難,這裡我們選擇alibaba的jstorm)跟蹤到的任務分配的一些資訊:
nimbus將分配好的任務的資訊寫到zookeeper上
step3:
supervisor根據zookeeper上的watch機制,監聽到有任務分配後,根據指定的任務分配資訊啟動相應的worker
step4:
檢視分配到的任務,以及啟動執行緒來執行spout和bolt元件
在執行的過程中,除了最後乙個bolt所在的task,其餘的task還需要向其他的task傳送資料,這裡就需要根據task_id來檢視其下乙份資料應傳送到哪乙個worker,然後根據該worker的ip位址(worker所在的主機的ip)和埠號(配置檔案中會指定worker的埠號)建立socket連線傳送資料
Storm核心元件介紹
nimbus 主控節點 用於接收,提交任務,來分配集群任務,集群的監控 zookeeper 儲存storm集群的資料儲存 心跳 集群狀態 nimbus任務分配到supervisor 分組策略 1 fields grouping 按照字段分組,相同字段傳送到同乙個task中 2 shuffle gro...
storm集群的監控
所謂兵馬未動,糧草先行,準備將storm用在某個專案中做實時資料分析。無論任何系統,一定要有監控系統並存,當故障發生的時候你能第乙個知道,而不是讓別人告訴你,那處理故障就很被動了。因此我寫了這麼個專案,取名叫storm monitor,放在了github上 主要功能如下 1.監控supervisor...
storm集群的搭建
在zookeeper集群的搭建中,我們已經完成了zookpeeper集群的搭建,本篇我們將講解如何搭建storm集群,並把storm集群接入到zookpeeper集群。軟體環境 linux配置python可以參考 linux環境下python的安裝過程 上傳apache storm 0.9.2 in...