作用
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对象,这里就不介绍啦。