Storm中Topology的状态

来源:互联网 发布:java全文检索 编辑:程序博客网 时间:2024/05/02 02:54

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


原文 :

Twitter Storm中Topology的状态

原创粉丝点击