Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

StormでTopologyを素早く起動させる方法は?

こんにちは。kimukimuです。

最近花粉で駆逐される側に回っている今日この頃です。

アレグラFX、ザジテン等普通に薬局で買える薬も強力なものがそろってきているんですが、
それ以上に花粉の症状がひどく、例年になく苦しんでいる状態です。
・・・ただ、マスクすると息が吸えずに苦しく、それはそれで問題なんですよね。

ともあれ、では本題に入りましょう。

1.Topologyを起動するのには時間がかかります

実際にStormクラスタを扱ったことがある方であればわかるかと思いますが、
StormでTopologyを起動する際には下記のように時間がかかります。
#当然、マシンの性能で変わりますがCorei7やXeon E3といったCPUを積んだエントリサーバクラスだと下記くらいです。

  1. TopologyをSubmitするJavaコマンドを起動するのにかかる時間:3秒
  2. TopologyをSubmitする時間:2秒
  3. TopologyをSubmitしてから実際に走り出すまでの時間:5秒

10秒、とこれだけ書くとそれほど大きく感じないかもしれませんが、
この10秒でも下記のようなケースでは問題になります。

2.Topologyの起動が遅くて困るシチュエーション

上記に書いた時間がかかって一番困るのは、
個人的には「Toopologyのアップデート」というタイミングだと思います。

当然、Stormを使うような場所はそれだけ大量のデータが流れるわけでして、
そんな中で待つ必要がある・・・というのはやはり大きな制約でしょう。

3.Topologyの有効無効は切り替えられる

ですが、Storm-0.8.2にバージョン更新されたStorm-UIを見てみると
下記のように「Activate」「Deactivate」「Rebalance」「Kill」というボタンがあります。

ここで「Deactivate」のボタンを押してみると・・・・
下記のようにTopologyの状態が「INACTIVE」に切り替わります。

次にボタンを押せるようになるまで数十秒ほどかかりますが、
押せるようになった後であれば「Activate」のボタンを押せばすぐに「ACTIVE」の状態に戻ります。

ということは、下の流れのように
「あらかじめINACTIVEの状態で新しいバージョンのTopologyを用意しておいて、
 Activateさせればすぐに新しいバージョンのTopologyに切り替わるのではないか?」というわけですね。

1.新バージョンのTopologyをINACTIVE状態で用意

2.旧バージョンのTopologyを終了

3.新バージョンのTopologyを「Activate」

4.Topologyを「無効」の状態で起動してみます

ですが、これを実行するためには「TopologyをINACTIVE状態でSubmitする」ことが必要になります。
で、Storm-0.8.2から丁度「Topologyの初期状態を指定できる」機能が加わっています。

そのため、実際に出来るかどうか試してみましょう。

実際に「TopologyをINACTIVE状態でSubmitする」には下記のようにコードを記述します。
尚、毎度のようにソース全ては「GitHub(StormSample)」を参照ください。

// Topology起動時にINACTIVE状態でSubmitするよう設定
SubmitOptions options = new SubmitOptions(TopologyInitialStatus.INACTIVE);
// TopologyをSubmit
StormSubmitter.submitTopology("DecisionTest", conf, builder.createTopology(), options);

上記のコードで実際にSubmitをしてみると、下の画面のように「INACTIVE」状態で初期化されました。

これで、「INACTIVE状態で起動して素早くACTIVEに切り替える」ということが可能、ということがわかりました。

5.何が嬉しいの?

一度書いていますが、応用することで
「バージョン更新などの際に素早くバージョンを切り替えることができる」
が嬉しい点として挙げられると思います。

もしStormのTopologyを起動するのに時間がかかって困るという方がいたら、
是非試してみてください。

それでは。