「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- NSA(アメリカ国家安全保障局)で開発されていたものが、
2014年にオープンソースソフトウェアとして公開された。
- 2015年7月にApacheのTopレベルプロジェクトになった。
- ツールの仕様としては、ETLツールに近い。
(GUIを使ってデータとプロセスを定義する。)
- しかし、ETLは本来、バッチ指向なので、イベント指向のEAIに近いと言える。
- システム間のデータフロー自動化を行うために構築された。
特徴 †
- もともと、Niagrafilesという名前だった。
(ナイアガラの滝のようにドーッと降りてくる大量の水を処理するという発想。)
- 3Vの中で多様性を重視している。
(カチッと整形されたデータではなくても様々なデータが処理可能)
関連プロジェクト †
Registry †
フロー定義を「as a code」として管理するサブ・プロジェクト
小さなフットプリントでデータフローを実行できるサブ・プロジェクト
Apache Atlas †
大量のデータがどこから来てどこに行くのか、コンプライアンスの観点で追跡するプロジェクト
ユースケース †
公式文書に、
SOA、APIベースのシステム結合、IoT、BigData?、あとはMicroServices?
(These include things like; Service Oriented Architecture [soa],
the rise of the API [api][api2], Internet of Things [iot], and Big Data [bigdata].)
と書かれている。
ツールの仕様としては、どちらにも適合する可能性がある。
バッチ指向なので適合しない可能性がある(性能検証などが必要)。
イベント指向なのでこちらのほうが適合し易い。
WebAPI †
Remote Process GroupでHTTPなどのEndpointを定義してS2Sが可能。
以下での利用が想定されている。
用語 †
FlowFile? †
ユーザデータ
Attirbutes †
ユーザーデータに関連付けられたKeyValue?のメタ情報。
Content †
扱うデータの本体(バイナリ形式)
Processor †
「FlowFileにどんな処理を施すか」を表す、
データフローを構築するために利用できる最も重要なビルディングブロック。
- データフローを記述したグラフ(DAG)におけるノード(節点・頂点)に相当する。
- FlowFiles?の作成、送信、受信、変換、ルーティング、分割、マージ、および処理を担当する。
- 組込Processorに加え、カスタムProcessorを開発して組込むことも可能。
利用可能なProcessor †
- 色々なProcessorが用意されており、様々なシステムのデータを
する機能を提供する。
- なお、Webサービスを作成する場合は、
HandleHttpRequest? / HandleHttpResponse?
を使用することができる。
Processorのタイプ †
以下は、Processorのタイプ。
具体的なProcessorは下記「参考」のURLを参照。
- 接続
- Routing and Mediation(分岐と速度調整)
- Splitting and Aggregation(分割・集約)
- 変換・処理
- Attribute Extraction(属性の付与など)
- Data Transformation(フォーマットの変換)
- データの配信
Data Egress / Sending Data
- 取込・配信
- System Interaction(OSコマンドの実行)
- Database Access(SQLの実行)
- HTTP(HTTSクライアント or サーバの実行)
- Amazon Web Services(サービスへのI/Oの実行)
Relationship †
「Processorが行った処理に応じて,どのProcessorにどのFlowFileを届けるか」を表す。
- データフローを記述したグラフ(DAG)におけるエッジ(枝・辺])の属性に相当する。
- 各Processorごとにあらかじめ定義されている。
アーキテクチャ †
ホストOS上のJVM内で実行される。

引用:nifi.apache.org/docs/nifi-docs/html/images/zero-master-node.png
主要コンポーネント †
以下は、JVM上の主なコンポーネント。
Web Server †
HTTPベースのコマンドと制御APIをホストする。
Flow Controller †
操作の頭脳
Extensions †
- 様々なタイプの拡張がある。
- JVM内で動作して実行される。
FlowFile? Repository †
- 現在アクティブなFlowFileの状態を追跡する場所。
- リポジトリの実装はプラガブル。
Content Repository †
- FlowFileの実際のコンテンツバイトが存在する場所。
- リポジトリの実装はプラガブル。
- ファイルシステムにデータのブロックを格納する。
- デフォルトの場所は・・・
- 複数のファイルシステム格納場所を指定するできる。
Provenance Repository †
- すべてのProvenance イベント・データが格納される場所。
- リポジトリの構成はプラガブル。
- デフォルトの構成では、1つ以上の物理ディスク・ボリュームを使用
- 各ロケーション内でイベントデータが索引付けされ、検索可能。
クラスタリング †
- 1.0以降、Apache ZooKeeper?のクラスタ内で動作できる。
- 各ノードは、データに対して同じタスクを実行する。
- しかし、それぞれ異なるデータセットで動作する。
ZooKeeper? †
- コーディネータとして単一のノードを選択
- プライマリノードとして単一のノードを選択
コーディネータ †
- フェイルオーバーはZooKeeper?によって自動的に処理される。
- すべてのノードは、ハートビートとステータス情報をコーディネータに報告。
- コーディネータはノードの切断と接続を行う。
プライマリノード †
- DataFlow?マネージャとして、UIを介してクラスタとやりとりできる。
- 変更は、クラスタ内のすべてのノードに複製され、複数のエントリポイントが可能になる。
step by step的な †
参考 †
nifi.apache.org †
hortonworks.com †
ijokarumawak/hdf-tutorials-ja †
Qiita †
参考 †
設計コンセプト †
FBP †
- 基本的な設計コンセプトはFlow Based Programming(FBP)と関連が強い。
- Flow Based Programming(FBP)の用語とのマッピングは下表のようになっている。
# | NiFi? 用語 | FBP 用語 | Description |
1 | FlowFile? | Information Packet | システム間を移動する各オブジェクトのことを示している。 バイナリ形式でKeyValue?の属性文字列を保持している。 |
2 | Processor | Information Packet | Enterprise Integration Patterns(EIP)においてルーティング、変換、システム仲介を行うもの。 与えられたFlowFile?の属性、およびFlowFile?の流れるストリームにアクセスする。 0から任意の数のFlowFile?群を処理単位として認識し、その単位で処理やコミット、ロールバックを可能とする。 |
3 | Connection | Bounded Buffer | Processor間の実接続を示す。 キューとして動作し、様々な処理を異なるタイミングで差し込むことが可能。 これらのキューは動的な優先度付け機構、バックプレッシャー機構を有する。 |
4 | Controller | Scheduler | プロセス、スレッドの配置や接続関係について統括している。 Processor間のFlowFile?のやり取りを容易にするBrokerとして動作する。 |
5 | Process Group | subnet | プロセスとConnectionの一群を指し、外部からメッセージを受け取るInputPort?や出力するOutputPort?を有する。 これらの組み合わせによってProcess Groupは新たなコンポーネントの生成も可能になっている。 |
SEDA †
- この設計コンセプトはstaged event-driven architecture(SEDA)とも似ている。
- staged event-driven architecture(SEDA)から様々な設計アイディアをえている。
SlideShare? †
KojiKawamura? †
https://www.slideshare.net/KojiKawamura/presentations
Qiita †
kimutansk †
https://qiita.com/kimutansk