轉自:http://xumingming.sinaapp.com/466/twitter-storm-code-analysis-zookeeper-dirs/
我們知道Twitter Storm的所有的狀態信息都是保存在Zookeeper裏面,nimbus通過在zookeeper上面寫狀態信息來分配任務,supervisor,task通過從zookeeper中讀狀態來領取任務,同時supervisor, task也會定義發送心跳信息到zookeeper, 使得nimbus可以監控整個storm集羣的狀態, 從而可以重啓一些掛掉的task。ZooKeeper 使得整個storm集羣十分的健壯 — 任何一臺工作機器掛掉都沒有關係,只要重啓然後從zookeeper上面重新獲取狀態信息就可以了。本文主要介紹Twitter Storm在ZooKeeper中保存的數據目錄結構,源代碼主要是: backtype.storm.cluster, 廢話不多說,直接看下面的結構圖:
一個要注意的地方是,作者在代碼裏面很多地方用到的storm-id
,
其實就是topology-id
的意思。我在郵件列表裏面問了他一下, 他說以前他把topology叫做storm,
代碼裏面還沒有改過來。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/-{storm-zk-root}
-- storm在zookeeper上的根 |
目錄 | |-/assignments
-- topology的任務分配信息 |
| |
|-/{topology-id} -- 這個下面保存的是每個 |
topology的assignments |
信息包括: 對應的 |
nimbus上的代碼目錄,所有 |
task的啓動時間, |
每個task與機器、端口的映射 | |-/tasks
-- 所有的task |
| |
|-/{topology-id} -- 這個目錄下面id爲 |
| {topology-id}的topology |
| 所對應的所有的task-id |
| |
|-/{task-id} -- 這個文件裏面保存的是這個 |
task對應的component-id: |
可能是spout-id或者bolt-id | |-/storms
-- 這個目錄保存所有正在運行 |
| 的topology的id |
| |
|-/{topology-id} -- 這個文件保存這個topology |
的一些信息,包括topology的 |
名字,topology開始運行的時 |
間以及這個topology的狀態 |
(具體看StormBase類) | |-/supervisors
-- 這個目錄保存所有的supervisor |
| 的心跳信息 |
| |
|-/{supervisor-id} -- 這個文件保存的是supervisor |
的心跳信息包括:心跳時間,主 |
機名,這個supervisor上worker |
的端口號運行時間 |
(具體看SupervisorInfo類) | |-/taskbeats
-- 所有task的心跳 |
| |
|-/{topology-id} -- 這個目錄保存這個topology的所 |
| 有的task的心跳信息 |
| |
|-/{task-id} -- task的心跳信息,包括心跳的時 |
間,task運行時間以及一些統計 |
信息 | |-/taskerrors
-- 所有task所產生的error信息 | |-/{topology-id}
-- 這個目錄保存這個topology下面 |
每個task的出錯信息 | |-/{task-id}
-- 這個task的出錯信息 |