Twitter Storm中Topology的状态
Twitter Storm中Topology的状态
状态转换如下,Topology 的持久化状态包括: active, inactive, killed, rebalancing 四个状态。
代码上看到每种状态都可以转换成一些持久化 ( 写入到 zk 中的状态 ) 或者中间状态。
- (defn state-transitions [nimbus storm-id status]
 - {:active {:monitor (reassign-transition nimbus storm-id)
 - :inactivate :inactive
 - :activate nil
 - :rebalance (rebalance-transition nimbus storm-id status)
 - :kill (kill-transition nimbus storm-id)
 - }
 - :inactive {:monitor (reassign-transition nimbus storm-id)
 - :activate :active
 - :inactivate nil
 - :rebalance (rebalance-transition nimbus storm-id status)
 - :kill (kill-transition nimbus storm-id)
 - }
 - :killed {:startup (fn [] (delay-event nimbus
 - storm-id
 - (:kill-time-secs status)
 - :remove))
 - :kill (kill-transition nimbus storm-id)
 - :remove (fn []
 - (log-message "Killing topology: " storm-id)
 - (.remove-storm! (:storm-cluster-state nimbus)
 - storm-id)
 - nil)
 - }
 - :rebalancing {:startup (fn [] (delay-event nimbus
 - storm-id
 - (:delay-secs status)
 - :do-rebalance))
 - :kill (kill-transition nimbus storm-id)
 - :do-rebalance (fn []
 - (do-rebalance nimbus storm-id status)
 - (:old-status status))
 - }})
 
1. active
active 状态的时候可以转换成 monitor, inactivate, activate, rebalance, kill 。
(1) monitor: 转换成 monitor 实际上是执行了 reassign-transition 操作:
- (defn reassign-transition [nimbus storm-id]
 - (fn []
 - (reassign-topology nimbus storm-id)
 - nil
 - ))
 
可以看出,实际上是为这个 topology 重新分配任务,返回值为 nil , 说明在 zk 中不会更改 topology 的持久化状态。
(2)inactivate: 返回值是 inactive, 状态转换的时候会将 zk 中 topology 的状态转换成 inactive 。
(3)activate: nil 说明什么操作都不做
(4)rebalance: 实际上是调用了 rebalance-transition 函数,从代码可以看出,会将状态改成 rebalancing, 然后再转换成 do-rebalance 。 do-rebalance 其实也是重新分配任务,具体看4 。
- (defn rebalance-transition [nimbus storm-id status]
 - (fn [time num-workers executor-overrides]
 - (let [delay (if time
 - time
 - (get (read-storm-conf (:conf nimbus) storm-id)
 - TOPOLOGY-MESSAGE-TIMEOUT-SECS))]
 - (delay-event nimbus
 - storm-id
 - delay
 - :do-rebalance)
 - {:type :rebalancing
 - :delay-secs delay
 - :old-status status
 - :num-workers num-workers
 - :executor-overrides executor-overrides
 - })))
 
(5)kill: 实际上执行的是 kill-transition 方法,将 topology 的状态先改为 killed, 然后经过 kill-time 的时间,将topology remove, 详见3
- (defn kill-transition [nimbus storm-id]
 - (fn [kill-time]
 - (let [delay (if kill-time
 - kill-time
 - (get (read-storm-conf (:conf nimbus) storm-id)
 - TOPOLOGY-MESSAGE-TIMEOUT-SECS))]
 - (delay-event nimbus
 - storm-id
 - delay
 - :remove)
 - {:type :killed
 - :kill-time-secs delay})
 - ))
 
2. inactvie
(1) monitor: 与1中相同
(2) activate: 返回值是 active, 状态转换的时候会将 zk 中 topology 的状态转换成 active 。
(3) inactivate: nil 说明什么操作都不做
(4) rebalance: 与1中相同
3. killed
(1) startup:将状态转换成remove
(2) kill: 与1中相同
(3) remove: 实际上是调用了 remove-storm!函数, 清楚topology在zk上的相关目录。
- (remove-storm! [this storm-id]
 - (delete-node cluster-state (storm-task-root storm-id))
 - (delete-node cluster-state (assignment-path storm-id))
 - (remove-storm-base! this storm-id))
 
4. rebalancing
(1) startup:将状态转换成do-rebalance
(2) kill: 与1中相同
(3) do-rebalance: 实际上是重新将任务分配,与初始分配任务不同,它假设所有的任务都是活跃的,所有的端口都不要判断是否需要保留,也就是说所有的任务重新分配,无论某些端口上的任务分配已经满足均衡要求。
Twitter Storm中Topology的状态的更多相关文章
- 关于Storm 中Topology的并发度的理解
		
来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...
 - Twitter Storm中Bolt消息传递路径之源码解读
		
本文初次发表于storm-cn的google groups中,现以blog的方式再次发表,表明本人徽沪一郎确实读过这些代码,:). Bolt作为task被executor执行,而executor是一个 ...
 - Twitter Storm源代码分析之ZooKeeper中的目录结构
		
徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...
 - 在archlinux上搭建twitter storm cluster
		
本文详细描述如何在archlinux上搭建twitter storm cluster,转载请注明出处,谢谢. 有关archlinux基本系统安装,请参照archlinux简明安装指南一文,下面以上述为 ...
 - twitter storm源码走读之1 -- nimbus启动场景分析
		
欢迎转载,转载时请注明作者徽沪一郎及出处,谢谢. 本文详细介绍了twitter storm中的nimbus节点的启动场景,分析nimbus是如何一步步实现定义于storm.thrift中的servic ...
 - 【转】Twitter Storm: 在生产集群上运行topology
		
Twitter Storm: 在生产集群上运行topology 发表于 2011 年 10 月 07 日 由 xumingming 作者: xumingming | 可以转载, 但必须以超链接形式标明 ...
 - Twitter Storm如何保证消息不丢失
		
storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍storm是怎么做到这个保证的,以及我们使用者怎么做才能充分利用storm的可靠性特点. 一个tuple被”完全处理”是什么意 ...
 - Twitter Storm:单机环境的安装与配置
		
Twitter Storm:单机环境的安装与配置 好久没写博客了,这一段时间一直被导师push着做毕业设计.由于目前的方向偏向于图像识别检索,毕设打算做一个基于分布式计算平台的图像检索系统,查阅相关资 ...
 - Storm入门(五)Twitter Storm如何保证消息不丢失
		
转自:http://xumingming.sinaapp.com/127/twitter-storm如何保证消息不丢失/ storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍st ...
 
随机推荐
- AI入门---从破解AI开始
			
我这里说的AI,并不是人工智能(Artificial Intelligence),只是Adobe illustrator.旁边有做设计的朋友,在他的指引下,对这个工具还颇感兴趣.就先下载个工具,闲暇时 ...
 - 解决div设置浮动,高度消失
			
给包围 浮动的层 加清除浮动样式,样式要兼容的用下面的代码.clearfix {*zoom:1; clear:both;}.clearfix:after{content:".";d ...
 - <Python基础>装饰器的基本原理
			
1.装饰器 所谓装饰器一般是对已经使用(上线)的函数增加功能. 但是因为一般的大公司的严格按照开放封闭原则(对扩展是开放的,对修改是封闭的),不会让你修改原本的函数. 装饰器就是在不改变原本的函数且不 ...
 - vue表格之:summary-method="getSummaries"与show-summary(列求和)
			
//表格列求和 <el-table :summary-method="getSummaries" show-summary></el-table> getS ...
 - webpack 简单笔记(三)vue-cli 使用 webpack-bundle-analyzer 分析
			
当我们使用CommonsChunkPlugin插件时可以使用webpack-bundle-analyzer插件来分析分块是否达到我们的目地 安装 npm install --save-dev webp ...
 - Nand Flash 控制器工作原理
			
对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方 ...
 - 一个tcp连接可以发多少http请求
			
-----来自:松若章 -----zhuanlan.zhihu.com/p/61423830 曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学 ...
 - JavaScript特效源码(4、鼠标特效)
			
1.鼠标感应--渐现特效 鼠标感应渐显图片[平时很模糊的图片鼠标一放上就显示清楚] [修改图片名称即可][共2步] ====1.将以下代码加入HTML的<head></head> ...
 - Vim操作 -- 多段复位粘贴
			
Vim可以多段复制.粘贴.即,内容X复制到寄存器“1”,内容Y复制到寄存器“2”:粘贴时可以选择从“1”还是“2”粘贴. (1) Vim有13个粘贴板,分别是0.1.2.....9.a.“.+:用:r ...
 - 「题解」:[线性代数]:relays 奶牛接力跑
			
问题: relays 奶牛接力跑 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼 ...