Twitter Storm中Topology的状态

状态转换如下,Topology 的持久化状态包括: active, inactive, killed, rebalancing 四个状态。

代码上看到每种状态都可以转换成一些持久化 ( 写入到 zk 中的状态 ) 或者中间状态。

  1. (defn state-transitions [nimbus storm-id status]
  2. {:active {:monitor (reassign-transition nimbus storm-id)
  3. :inactivate :inactive
  4. :activate nil
  5. :rebalance (rebalance-transition nimbus storm-id status)
  6. :kill (kill-transition nimbus storm-id)
  7. }
  8. :inactive {:monitor (reassign-transition nimbus storm-id)
  9. :activate :active
  10. :inactivate nil
  11. :rebalance (rebalance-transition nimbus storm-id status)
  12. :kill (kill-transition nimbus storm-id)
  13. }
  14. :killed {:startup (fn [] (delay-event nimbus
  15. storm-id
  16. (:kill-time-secs status)
  17. :remove))
  18. :kill (kill-transition nimbus storm-id)
  19. :remove (fn []
  20. (log-message "Killing topology: " storm-id)
  21. (.remove-storm! (:storm-cluster-state nimbus)
  22. storm-id)
  23. nil)
  24. }
  25. :rebalancing {:startup (fn [] (delay-event nimbus
  26. storm-id
  27. (:delay-secs status)
  28. :do-rebalance))
  29. :kill (kill-transition nimbus storm-id)
  30. :do-rebalance (fn []
  31. (do-rebalance nimbus storm-id status)
  32. (:old-status status))
  33. }})

1. active

active 状态的时候可以转换成 monitor, inactivate, activate, rebalance, kill 。

(1) monitor: 转换成 monitor 实际上是执行了 reassign-transition 操作:

  1. (defn reassign-transition [nimbus storm-id]
  2. (fn []
  3. (reassign-topology nimbus storm-id)
  4. nil
  5. ))

可以看出,实际上是为这个 topology 重新分配任务,返回值为 nil , 说明在 zk 中不会更改 topology 的持久化状态。

(2)inactivate: 返回值是 inactive, 状态转换的时候会将 zk 中 topology 的状态转换成 inactive 。

(3)activate: nil 说明什么操作都不做

(4)rebalance: 实际上是调用了 rebalance-transition 函数,从代码可以看出,会将状态改成 rebalancing, 然后再转换成 do-rebalance 。 do-rebalance 其实也是重新分配任务,具体看4 。

  1. (defn rebalance-transition [nimbus storm-id status]
  2. (fn [time num-workers executor-overrides]
  3. (let [delay (if time
  4. time
  5. (get (read-storm-conf (:conf nimbus) storm-id)
  6. TOPOLOGY-MESSAGE-TIMEOUT-SECS))]
  7. (delay-event nimbus
  8. storm-id
  9. delay
  10. :do-rebalance)
  11. {:type :rebalancing
  12. :delay-secs delay
  13. :old-status status
  14. :num-workers num-workers
  15. :executor-overrides executor-overrides
  16. })))

(5)kill: 实际上执行的是 kill-transition 方法,将 topology 的状态先改为 killed, 然后经过 kill-time 的时间,将topology remove, 详见3

  1. (defn kill-transition [nimbus storm-id]
  2. (fn [kill-time]
  3. (let [delay (if kill-time
  4. kill-time
  5. (get (read-storm-conf (:conf nimbus) storm-id)
  6. TOPOLOGY-MESSAGE-TIMEOUT-SECS))]
  7. (delay-event nimbus
  8. storm-id
  9. delay
  10. :remove)
  11. {:type :killed
  12. :kill-time-secs delay})
  13. ))

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上的相关目录。

  1. (remove-storm! [this storm-id]
  2. (delete-node cluster-state (storm-task-root storm-id))
  3. (delete-node cluster-state (assignment-path storm-id))
  4. (remove-storm-base! this storm-id))

4. rebalancing

(1) startup:将状态转换成do-rebalance

(2) kill:  与1中相同

(3) do-rebalance:  实际上是重新将任务分配,与初始分配任务不同,它假设所有的任务都是活跃的,所有的端口都不要判断是否需要保留,也就是说所有的任务重新分配,无论某些端口上的任务分配已经满足均衡要求。

Twitter Storm中Topology的状态的更多相关文章

  1. 关于Storm 中Topology的并发度的理解

    来自:https://storm.apache.org/documentation/Understanding-the-parallelism-of-a-Storm-topology.html htt ...

  2. Twitter Storm中Bolt消息传递路径之源码解读

    本文初次发表于storm-cn的google groups中,现以blog的方式再次发表,表明本人徽沪一郎确实读过这些代码,:). Bolt作为task被executor执行,而executor是一个 ...

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

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

  4. 在archlinux上搭建twitter storm cluster

    本文详细描述如何在archlinux上搭建twitter storm cluster,转载请注明出处,谢谢. 有关archlinux基本系统安装,请参照archlinux简明安装指南一文,下面以上述为 ...

  5. twitter storm源码走读之1 -- nimbus启动场景分析

    欢迎转载,转载时请注明作者徽沪一郎及出处,谢谢. 本文详细介绍了twitter storm中的nimbus节点的启动场景,分析nimbus是如何一步步实现定义于storm.thrift中的servic ...

  6. 【转】Twitter Storm: 在生产集群上运行topology

    Twitter Storm: 在生产集群上运行topology 发表于 2011 年 10 月 07 日 由 xumingming 作者: xumingming | 可以转载, 但必须以超链接形式标明 ...

  7. Twitter Storm如何保证消息不丢失

    storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍storm是怎么做到这个保证的,以及我们使用者怎么做才能充分利用storm的可靠性特点. 一个tuple被”完全处理”是什么意 ...

  8. Twitter Storm:单机环境的安装与配置

    Twitter Storm:单机环境的安装与配置 好久没写博客了,这一段时间一直被导师push着做毕业设计.由于目前的方向偏向于图像识别检索,毕设打算做一个基于分布式计算平台的图像检索系统,查阅相关资 ...

  9. Storm入门(五)Twitter Storm如何保证消息不丢失

    转自:http://xumingming.sinaapp.com/127/twitter-storm如何保证消息不丢失/ storm保证从spout发出的每个tuple都会被完全处理.这篇文章介绍st ...

随机推荐

  1. FTP、FTPS、SFTP概览

    1. 基本概念 FTP:File Transfer Protocol FTPS:FTP over SSL.构建在SSL/TLS(Secure Socket Layer/Transport Layer ...

  2. Walk Through Squares HDU - 4758 AC自动机+简单状压DP

    题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...

  3. js 实现加载百分比效果

    效果: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  4. C++:多线程001

    C++ 多线程 创建线程的API函数 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD:线程安全相关的属性,常置为N ...

  5. 网站PC端和移动端,用户通过设备识别

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!--<me ...

  6. SpringBoot配置自定义日期参数转换器

    1.自定义参数转换器 自定义参数转换器必须实现Converter接口 /** * Created by IntelliJ IDEA. * * @Auther: ShaoHsiung * @Date: ...

  7. Apache Flink 进阶(一):Runtime 核心机制剖析

    1. 综述 本文主要介绍 Flink Runtime 的作业执行的核心机制.首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程,然后介绍在这个过程,Flink 是怎么进行资源 ...

  8. display和position以及其余标签的使用

    今天主要学习了两大标签display和position:中文名字是显示和位置,这两个元素在前端的学习还是很重要的,因为在css的布局里面会经常用到这两种元素. 还有一些其余的标签例:margin,pa ...

  9. python相关软件安装流程图解————————python安装——————python-3.7.1-amd64

    首先查看自己的系统版本 是32位的还是64位的 https://www.python.org/downloads/windows/ —————————python下载安装 开始———————————— ...

  10. centos6 php7 安装 memcache 和 memcached

    下载安装memcache 注意:官网的memcache包,暂时好像不支持php7.所以到下面地址下载memcache包,切换到php7分支 php7 memcache github 下载地址 官网下载 ...