創屋ぷれす

NiFiとは

NiFi(ナイファイ)について調べました。

■ 概要
・米国家安全保障局(NSA)が開発していた「Niagrafiles」がOSS化された
・2015/7 Apache Top Level Project になった
・GUIでデータフローの自動化・管理を行える
・JVM上で動く
・同様のソフトウェアにはNode-REDなどがある
・Flow-based programming(FBP)のコンセプトがベースになっている。

■ メリット
・スケーラブルなデータフローを構築できる
・concurrency(並行)を、その複雑さを意識せずに使える
・構造がきれいになる→再利用・テストがしやすい
・データの流れが理解し安い
…など

複数システム連携 - 特に、規模がスケールしたりリアルタイム性が求められるもの - の開発経験・事例が増え、今までシステム個別に設計していた部分がパターン化されてきた、ということでしょうか。システム「間」の動作を制御するので、複数システムに範囲を拡大したフレームワークと理解してもよいと思います。GUIで操作できるとあまりフレームワークという言い方はしない気がしますが。




追記 2015/05/14:
そういえば、NiFiがデータフローオーケストレーションツールという事を記載していませんでした。
どういう事が出来るんだろう?と思い、少し触ってみました。フレームワークっぽいものを想像していましたが…ツールですね。

やったことは…
1. NiFiを起動(Windowsの場合バッチファイルで起動)
2. ブラウザで画面(キャンバス)を開く (jreのインストール/許可が必要)
3. キャンバス上でGUIによりデータの流れを組み立てる

3.について簡単に説明すると、本質的には下記2つ。
(1) 処理の定義
 メニュー上の「processor(=処理)」アイコンをキャンバスにドラッグ&ドロップして配置、処理の種類と設定を行う。
 たとえば…
  ・[GetFile]という処理を選択して、ディレクトリパス/対象ファイル名(by正規表現)/取得したファイルを削除するか?など設定
  ・[CompressContent]という処理を選択して、圧縮形式/拡張子を変更するか?など設定
  ・[PutFile]という処理を選択して、ディレクトリパス/ディレクトリがなかったら作るか?など設定

(2) 接続の定義
 キャンバスに配置した「processor」どうしをconnectionで接続する。
 (1)の例でいえば、[GetFile]-(connection)→[CompressContent]-(connection)→[PutFile]とデータのフローを定義する
 これで、GetFileで指定したディレクトリにファイルを配置すると、取得・圧縮してPutFileで指定したフォルダーに配置してくれるようになります。

その他、
[processor]や[connection]毎に処理したデータ量やキュー数を確認できますし、processorをcustomで作れたり、定義をグループ化できたり、定義をテンプレート化してImport/Export(XML形式)できたり、リモート接続できたり… と実用に必要な機能もあります。

最後に触ってみた感想です(大規模向けの側面についてはわかりませんが…)
・設計/プロトタイプからシームレスに実システムに変わっていくような開発になりそう。
・GUIツールを使ってもシステムの知識/経験は必要で、便利というより、むしろGUIツール無しでデータフローが多いシステムを作るのは非現実的に思える。
・実際にどういった事が出来て、それをGUIでどう組み立てるかは、公開されているテンプレートなどを見てみないとなかなか解らない。

Comments are closed.