众所周知,storm 已经是业界主流的流时处理框架,Storm 被广泛应用于实时分析,在线机器学习,持续计算、分布式远程调用等领域。当前无论是内部还是外部论坛介绍原理的文档都比较多,但主要都是从运行机制和原理方面的介绍,在 UI 方面的介绍甚少,今天我试着向大家介绍一下 storm ui,一方面可以让大家了解一下 storm 的机制,另外也可以让大家更好的使用好 storm ui 协助大家自助解决使用过程中的问题。
一. 数据上报及展示流程
- 数据上报流程:worker/supervisor/nimbus 会定时上报统计信息到 zk
- 数据展现流程:ui 调用 nimbus 的服务从 zk 中取出数据进行分类聚合汇总,然后展示到前端
二. 数据类型
通常我们要真正理解一个事物,通常都会从来龙去脉进行解剖;理解 storm ui 也是,想理解 storm 有什么数据,那么先去理解 storm 有哪些动作就事半功倍了,以下是 storm 中 worker/supervisor/nimbus 的基本操作及对应的数据类型,左边为操作,右边为数据。
-
spout:
- emit:向下游提交 tuple,对应的统计数据为 emit/transfer,emit=emit 执行数量,transfer=emit 执行数量 * 下游 bolt 个数
- ack:成功流转之后的操作,对应的统计数据为 ack/complete-lantency,ack=成功流转次数 complete-lantency=成功流转平均时间
- fail:失败流转之后的操作 对应的统计数据为 fail,fail=失败流转次数
-
bolt:
- execute:接收到上游数据之后的执行操作 对应的统计数据为 execute/execute-lantency,execute=执行次数 execute-latency=平均执行时间
- emit:与 spout.emit 相同
- ack:bolt 完成 execute 主动发起的 ack 操作,对应的数据为 ack,ack=执行次数
通常数据的统计会对系统的性能造成一定的影响,那么 storm 中为了平衡这种影响,采取了抽样的方式进行上报数据; storm 中把此值默认为 0.05,即每执行 20 次则执行一次数据累加(value = 20),当然我们也可以修改抽样的配置值为 1,那么就是逐条上报了。
-
supervisor
- node add:增加 supervisor 节点,对应的会向 zk 注册一条 supervisorinfo 信息,包含:host all-slots used-slots uptime version resource
- node del:删除 supervisor 节点,那么会从 zk 中删除一条 supervisorinfo 信息
- worker startup:启动了一个 worker,那么 supervisorinfo 的 used-slots( 1) resource 会发生变化
- worker shutwodn:关闭一个 worker,那么 supervisorinfo 的 used-slots(-1) resource 会发生变化
-
nimbus
- node add:增加一个 nimbus 节点,那么会向 zk 注册一条 nimbus-summary 信息,包含:host port isleader uptime version
- node del:删除一个 nimbus 节点,那么会从 zk 中删除一条 nimbus-summary 信息
- leader change:leader 发生变更,那么对应的 nimbus-summary 中的 isleader 发生变化
三. 页面展现结构
在上述的第二点中已经说明了基本操作及对应的数据类型,那么在页面中就可以很好的对应了,先从整体视图来看看我们 storm ui 有什么信息,此 storm ui 为我们数平自己开发维护的 jstorm,一方面用 tab 页把 topology summary/nimbus summary/supervisor summary/nimbus configuration 分类展示,另外加了很多快捷链接入口用于查看到关注的内容,以及把常用的 kill topology 操作移动到首页
-
首页-初始化
- cluster summary: 展示集群的整体信息,包含版本、在线时间、启动时间、管理的 supervisor 个数、总的节点数、已用节点数、空闲节点数、在运行的 executor/task 数
- topology summary: 展示所有正在运行的 topology 信息,包含名称、id、状态、在线时间、提交时间、占用的 worker 数、拥有的 executor 数、拥有的 task 数、快捷关闭按钮
-
首页-supervisor summary: 展示所有的 supervisor 节点,包含 id、主机名称、在线时间、启动时间、总的 worker 节点数、已经使用的 worker 节点数
-
首页-nimbus summary: 展示所有的 nimbus 节点,包含主机名称、端口号、是否 leader、版本号、在线时间、启动时间
-
首页-nimbus configuration: 把配置信息以列表展现出来
-
topology 详情页
- topology summary:与首页对应的 topology summary 对应。
- topology actions:用于 topology 的一些操作:激活、注销、重分配、debug/stop debug、修改日志级别。
- topology stats:按时间窗口展现统计数据:十分钟表示近十分钟的统计,3 小时表示近 3 小时的统计等。
- spouts:spout 组件的统计数据,数据含义在第二点的数据类型已有说明。
- bolts:bolt 组件的统计数据,数据含义在第二点的数据类型已有说明。
- topology visualization:展示 topology 的拓扑结构图及数据传输情况。
- topology configuration:展示 topology 的配置信息。
-
component 详情页
- component summary:展示 component 的 id、executor 个数、task 个数、debug 日志。
- component actions:提供 component 的 debug/stop debug 操作。
- spout/bolt stats:按时间窗口展示数据,数据含义在第二点的数据类型已有说明。
- input stats:输入流数据,包含上游 component、stream、执行时间、执行次数、bolt 正常流转的处理时间、ack 数、失败数。
- output stats:输出流数据,包含 stream、emit 个数、transfer 个数。
- executors:executor 数据,包含 id,在线时间、所在主机及端口、emit 个数、transfer 个数、执行时间、执行个数、成功流转直接、ack 个数、失败个数。
- profile and debugging:用于诊断 worker 的运行情况,执行 jstack/jmap 等操作对 jvm 进行检测输出到文件,供用户下载打开查看 jvm 的运行情况。