您的位置:首页 > Web前端 > JavaScript

jstorm源码分析: zookeeper

2016-10-16 21:36 281 查看

作用

zookeeper在整个系统中主要用户各个角色信息传递的中介,所以里面存了不少的信息

信息

我们只要打开zookeeper目录,可以看到很多的信息,下面一一介绍

supervisors

这里存放了集群中所有的supervisor的信息, 具体保存时候按照supervisor_id为目录名保存,具体的信息使用SupervisorInfo类进行保存,如下

private static final long serialVersionUID = -8384417078907518922L;

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 = -3013095336395395213L;
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 {
1: required i32 time;
2: required i32 uptime;
}

struct TopologyTaskHbInfo {
1: required string topologyId;
2: required i32 topologyMasterId;
3: optional map<i32, TaskHeartbeat> taskHbs;
}


每个task有个启动时间,有个更新时间

taskerrors

这里存放了所有task的错误信息,按照topology_id/task_id/time_stamp/error_info这样保存的,每个任务保留最新的几个错误,老的不保存,另外在一个 topology下,还有个last_error这个保存最新的错误,提交效率。 具体错误信息就是一个String对象,这里就不介绍啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: