• Twitter Storm中Topology的状态


    Twitter Storm中Topology的状态

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

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

    Java代码  
    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 操作:

    Java代码  
    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 。

    Java代码  
    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 

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

    Java代码  
    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:  实际上是重新将任务分配,与初始分配任务不同,它假设所有的任务都是活跃的,所有的端口都不要判断是否需要保留,也就是说所有的任务重新分配,无论某些端口上的任务分配已经满足均衡要求。

  • 相关阅读:
    二路归并排序简介及其并行化 分类: 算法与数据结构 2015-05-08 17:46 112人阅读 评论(0) 收藏
    基数排序简介及其并行化 分类: 算法与数据结构 2015-05-08 10:10 59人阅读 评论(0) 收藏
    常见排序算法分类 分类: 算法与数据结构 2015-05-08 00:49 31人阅读 评论(0) 收藏
    浅谈new operator、operator new和placement new 分类: C/C++ 2015-05-05 00:19 41人阅读 评论(0) 收藏
    OpenMP对于嵌套循环应该添加多少个parallel for 分类: OpenMP C/C++ Linux 2015-04-27 14:48 53人阅读 评论(0) 收藏
    C++实现不能被继承的类——终结类 分类: C/C++ 2015-04-06 14:48 64人阅读 评论(0) 收藏
    oracle数据库的随堂笔记(四)-定义并使用变量
    oracle数据库的随堂笔记(三)-过程、函数、触发器
    oracle数据库的随堂笔记(二)-块
    oracle数据库的随堂笔记(一)-常用操作
  • 原文地址:https://www.cnblogs.com/yaohaitao/p/5456990.html
Copyright © 2020-2023  润新知