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

  • 相关阅读:
    es6 简介
    npm 快速开发技巧
    css清除浮动方法
    mui 总结
    7种 JS 创建对象的经典方式
    JavaScript 的 this 原理
    使用定时器
    dom 操作及方法
    JavaScript的6种继承方式及其优缺点
    贪吃蛇游戏代码
  • 原文地址:https://www.cnblogs.com/yaohaitao/p/5456990.html
Copyright © 2011-2022 走看看