FlumeNGについて - hadoopアドベントカレンダー2011

hadoopアドベントカレンダー2011 22日目を書きます。

私からはFlumeNGについて、
とりあえず理解できたところまで紹介します。
 #間違えているところがあればすみません。

参考にしたページはこちら
 https://cwiki.apache.org/FLUME/flume-ng.html
 Apache Flume - Architecture of Flume NG : Apache Flume
また、私はまだ見終わっていないのですが、
12/16にアメリカで行われたFlumeNGに関する勉強会(?)が公開されています。
Docにはかかれていないような質問がされている気がします。
 Flume NG Teach-In - 80 mins - December 16, 2011 on Vimeo

まず、

①FlumeNGは何者か?

FlumeNGは現在リリースされているFlumeをリファクタしてできるものです。
現在のFlume(以降FlumeOG)からbranch切って開発されています。
FlumeOGは影響範囲の大きいCoreな部分を修正しないと直らないバグを抱えています。
それらを今のうちに直そうとしているようです。

私が実際にFlumeOGを使ってみた感想ですが、
確かにFlumeOGのバグは若干多い気がします。
 ・FlumeNodeが多いとFlumeの設定中(exec config)にフリーズする
 ・設定の上書きしようとすると必ず例外(InterruptedException)が出て、設定反映できないことがある
 ・Collectorが起動直後、高い確率で死ぬ(待ち受けポートが閉じる)
  … 
大体はissueの記事を見つけ、運用で回避可能だと分かったのですがね。


②FlumeNGで何が変わるか?

ざっくり大きいものを。

(1)SourceとSinkの間に「Channel」ができます。
 ⇒簡単に言えばキューです。
  Sourceからきたデータを一時的にChannelに蓄えてからSinkに渡すことで、
  SourceからSinkへ確実にデータを受け渡します。
  FlumeOGではPumperThreadというスレッド内で1イベントごとに受け渡ししているのですが、
  SourceがSinkを、またはSinkがSourceをブロックしてしまうことがあるそうで、
  Open()またはClose()するときに影響を出す(タイムアウトしてスレッドに割り込もうとする)ケースがあるそうです。

(2)データの送信先を「Group」で指定します。
 ⇒FlumeNGではマシンのホスト名を指定する必要がありましたが、
  FlumeNGが使用するホスト名とFlumeNode名はDocとして別にまとめて管理する必要があり、
  のペアは設定見ただけでは分かりにくいです。
  そこでFlumeNGでは、データの送信先・受信元の指定をGroupとして名前を指定することで解決できます。

(3)設定を読み込む/溜め込むインターフェース追加
 ⇒FlumeOGで問題になったCore部分にメスを入れた結果、できた機構と思われます。
  冒頭で私が書いたバグから分かる通り、
  FlumeNGには設定読み込み/反映のときに起こるバグがあります。

その他「LifecycleAware」というものがあり、
論理Nodeの状態・ライフサイクルを管理する(?)クラスが増えるようですが、
Docが「TODO」となっているので、詳細は不明です。


以下の図はオマケです。
FlumeNG読んで読み取れたところをクラス図に起こしてみました。
 #乏しい英語読解力で起こした図のため、間違えている箇所がある気がします。
 #参考程度に。


③FlumeNGはいつリリースされるか?
FlumeUserMLで質問している人がいました。
その回答が以下のリンクになります。
 Re: Flume 0.9.x vs Flume NG

回答者のEric Sammerさん(Flumeコミッター)としては、
アルファ版が早ければ今年中、
安定版は2012の上旬に出したいそうです。



以上です。