Twitter Storm源代码分析之ZooKeeper中的目录结构

2020年10月6日20:59:01
评论

我们知道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, 代码里面还没有改过来。

/-{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的出错信息

推荐阅读:

Twitter Storm安装配置(集群)笔记 http://www.linuxidc.com/Linux/2013-05/84307.htm

安装Twitter Storm集群 http://www.linuxidc.com/Linux/2012-07/66336.htm

企鹅博客
  • 本文由 发表于 2020年10月6日20:59:01
  • 转载请务必保留本文链接:https://www.qieseo.com/159309.html

发表评论