作者: xumingming | 可以轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明
轉自網址: 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的出錯信息 |