作用
zookeeper在整個系統中主要使用者各個角色資訊傳遞的中介,是以裡面存了不少的資訊
資訊
我們隻要打開zookeeper目錄,可以看到很多的資訊,下面一一介紹
supervisors
這裡存放了叢集中所有的supervisor的資訊, 具體儲存時候按照supervisor_id為目錄名儲存,具體的資訊使用SupervisorInfo類進行儲存,如下
private static final long serialVersionUID = -L;
private final String hostName; //機器的名稱
private final String supervisorId; //唯一的id,通過随機數生成,格式: xxxxxxxx_xxxx_xxxx_xxxx_xxxxxxxxxxxx
private Integer timeSecs; //上次心跳檢測的時間
private Integer uptimeSecs; //上次心跳檢測離superviosr啟動的時間
private Set<Integer> workerPorts; //work的端口
private transient Set<Integer> availableWorkerPorts; //空閑的work
nimbus_master和nimbus_slavel
這裡儲存了nimbus的資訊,一個是主,一個是備的,具體的資訊如下
assignment
當我們把一個storm的任務送出給nimbus後,他就會負責給這個任務相關的資源、work以及task配置設定,這些資訊都儲存在這裡,具體的Assignment這個類來實作的
//代碼、配置和jar所在的路徑 nimbus/stormdist]/topology_id/
private final String masterCodeDir;
/**
* @@@ nodeHost store <supervisorId, hostname>, this will waste some zk storage
*/
//機器資訊 <supervisorId, hostname>關系
private final Map<String, String> nodeHost;
// task啟動的時間 <taskId, startTime>
private final Map<Integer, Integer> taskStartTimeSecs;
// 所有配置設定的work
private final Set<ResourceWorkerSlot> workers;
// 任務的更新時間
private long timeStamp;
//任務的類型: 建立,更新,重新平衡,
private AssignmentType type;
topology
這裡存放的是我們送出的任務資訊,對應的StormBase這個類。我們的nimbus啟動時候,其中有個TopologyAssign成員,它主要負責接受送出的任務,現在任務寫到zookeeper的目錄下去
private static final long serialVersionUID = -L;
private String stormName; //任務的名稱
private int lanchTimeSecs; //任務送出時間
private StormStatus status; //任務狀态 active("active"), inactive("inactive"), rebalancing("rebalancing"), killed("killed"),
private boolean enableMonitor = true; //是否開啟監控
private String group; //這個是幹什麼用的?
tasks
這裡存放目前叢集上所有的task資訊,按照 topology_name/task_id目錄進行存儲,具體的資訊如下:
private String componentId; //task所運作的元件的id
private String componentType; //元件類型: bolt, spout,
taskbeats
task的心跳資訊
struct TaskHeartbeat {
: required i32 time;
: required i32 uptime;
}
struct TopologyTaskHbInfo {
: required string topologyId;
: required i32 topologyMasterId;
: optional map<i32, TaskHeartbeat> taskHbs;
}
每個task有個啟動時間,有個更新時間
taskerrors
這裡存放了所有task的錯誤資訊,按照topology_id/task_id/time_stamp/error_info這樣儲存的,每個任務保留最新的幾個錯誤,老的不儲存,另外在一個 topology下,還有個last_error這個儲存最新的錯誤,送出效率。 具體錯誤資訊就是一個String對象,這裡就不介紹啦。