天天看點

jstorm源碼分析: zookeeper作用資訊

作用

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對象,這裡就不介紹啦。