-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_ApacheNiFi
- 戻る(分散処理:データ収集・格納系、EAI/ETL)
- Apache Sqoop
- Fluentd/Embulk
- Logstash, Beats(Elasticsearchの該当節を参照)
- Apache Flume
- Apache NiFi
- Apache Kafka
-
EAI/ETL系のデータフロー・オーケストレーション・ツール。
-
システム間のデータフロー自動化を行うために構築された。
-
NSA(アメリカ国家安全保障局)で開発されていたものが、
2014年にオープンソースソフトウェアとして公開された。 -
2015年7月にApacheのTopレベルプロジェクトになった。
-
もともと、Niagrafilesという名前だった。
(ナイアガラの滝のようにドーッと降りてくる大量の水を処理するという発想。) -
ツールの仕様としては、ETL(EAI/ETLの該当節を参照)ツールに近い(GUIを使ってデータとプロセスを定義する)。
-
しかし、ETLは本来、バッチ指向なので、イベント指向の EAI(EAI/ETLの該当節を参照)に近いと言える。
-
ビッグデータの3V(ビッグデータの該当節を参照)のコンテキストでは、
- Apache Storm代替のエッジ・コンピューティング・ツール。
- 「多様性」を重視している(カチッと整形されたデータではなくても様々なデータが処理可能)。
フロー定義を「as a code」として管理するサブ・プロジェクト
小さなフットプリントでデータフローを実行できるサブ・プロジェクト(MiNiFi)
大量のデータがどこから来てどこに行くのか、コンプライアンスの観点で追跡するプロジェクト
- 基本的な設計コンセプトはFlow Based Programming(FBP)と関連が強い。
- Flow Based Programming(FBP)の用語とのマッピングは下表のようになっている。
| # | NiFi 用語 | FBP 用語 | Description |
|---|---|---|---|
| 1 | FlowFile | Information Packet | システム間を移動する各オブジェクトのことを示している。 バイナリ形式でKeyValueの属性文字列を保持している。 |
| 2 | Processor | Black Box Process | 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は新たなコンポーネントの生成も可能になっている。 |
-
この設計コンセプトはstaged event-driven architecture(SEDA)とも似ている。
-
staged event-driven architecture(SEDA)から様々な設計アイディアをえている。
-
参考
- SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
http://www.mdw.la/papers/seda-sosp01.pdf
- SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
ユーザデータ
- ユーザが処理および配信のためにもたらすデータ
- ContentとAttributesからなる。
扱うデータの本体(バイナリ形式)
-
ユーザーデータに関連付けられたKeyValueのメタ情報。
-
以下の、3つの主要な利点がある。
-
Processor毎に独自のAttributesを持つ。
例えば、PutFile Processorであれば、ディレクトリとファイル名の属性を持つ。 - 起源・出所など、データに関する非常に貴重なcontextを提供する。
- 属性に基づいてフロー内でFlowFileのルーティングを決定できる。
-
Processor毎に独自のAttributesを持つ。
-
共通の属性
| # | 属性名 | 説明 | 変更可否 |
|---|---|---|---|
| 1 | filename | ファイル名 | |
| 2 | path | ディレクトリ名 | |
| 3 | fileSize | ファイルのバイト数 | 不可 |
| 4 | uuid | 他のFlowFilesとFlowFileを区別する汎用一意識別子 | 不可 |
| 5 | entryDate | FlowFileが作成された日時(UTC) | 不可 |
| 6 | lineageStartDate | 先祖の連鎖の最古の日時(UTC) | 不可 |
-
属性の設定
-
属性の利用
-
属性を使用した分岐
- NiFiの最も強力な機能の1つに、属性に基づいてFlowFilesを分岐させる機能がある。
- これには、RouteOnAttribute Processorに、Expression Languageの式を設定する。
- Processorは構成によって、一致と不一致のRelationshipを公開する。
-
Expression Language/プロパティ値での利用
-
属性値の参照:
${tag and the closing}(${uuid}など)
次のケースでは、属性名を引用符で囲む必要がある。
・必要属性名が文字以外の文字で始まる場合
・または数字、文字、ピリオド、アンダースコア以外の文字が含まれている場合 -
属性に対して多くの機能と比較を実行
・ファイル名に大小を区別しない「r」が含まれる。:${filename:toLower():contains('r')}・属性1と2が一致している。:
${attr1:equals(${attr2})}
-
-
参考
- Apache NiFi Expression Language Guide
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html
- Apache NiFi Expression Language Guide
-
-
データフローを記述したグラフ(DAG)におけるノード(節点・頂点)に相当する。
-
「FlowFileにどんな処理を施すか」を表す、最も重要なビルディング・ブロック。
-
FlowFilesの作成、送信、受信、変換、ルーティング、分割、マージ、および処理を担当する。
-
組込Processorに加え、カスタムProcessorを開発して組込むことも可能。
-
データフローを記述したグラフ(DAG)におけるエッジ(枝・辺)の属性に相当する。
-
各Processorごとにあらかじめ定義されている。
- original
- failure
- , etc.
-
RouteOnAttribute Processorに、Expression Languageの式を設定すると公開される。
- 一致
- 不一致
キューから取り出す優先順位は、大方、
- FirstInFirstOutPrioritizer
- OldestFlowFileFirstPrioritizer
などを設定しておけば良いのでは。
ホストOS上のJVM内で実行される。
https://nifi.apache.org/docs/nifi-docs/html/images/zero-master-node.png
引用:nifi.apache.org/docs/nifi-docs/html/images/zero-master-node.png
以下は、JVM上の主なコンポーネント。
HTTPベースのコマンドと制御APIをホストする。
- 様々なタイプの拡張がある。
- JVM内で動作して実行される。
操作の頭脳
-
Extensionsの
- スレッド実行
- リソース受け取りのスケジューリング
-
Processor間でのコンテキストの共有
- HTTPContext
- データストアとの接続
- 現在アクティブなFlowFileの状態を追跡する場所。
- リポジトリの実装はプラガブル。
- デフォルトの場所は、...\nifi-n.n.n\flowfile_repository
- FlowFileの実際のコンテンツバイトが存在する場所。
- リポジトリの実装はプラガブル。
- ファイルシステムにデータのブロックを格納する。
- 複数のファイルシステム格納場所を指定できる。
- デフォルトの場所は、...\nifi-n.n.n\content_repository
- すべてのProvenance イベント・データが格納される場所。
- リポジトリの構成はプラガブル。
- デフォルトの構成では、1つ以上の物理ディスク・ボリュームを使用
- 各ロケーション内でイベントデータが索引付けされ、検索可能。
- 1.0以降、Apache ZooKeeperのクラスタ内で動作できる。
- 各ノードは、データに対して同じタスクを実行する。
- しかし、それぞれ異なるデータセットで動作する。
- フェイルオーバーはZooKeeperによって自動的に処理される。
- すべてのノードは、ハートビートとステータス情報をコーディネータに報告。
- コーディネータはノードの切断と接続を行う。
- DataFlowマネージャとして、UIを介してクラスタとやりとりできる。
- 変更は、クラスタ内のすべてのノードに複製され、複数のエントリポイントが可能になる。
-
属性の使用に加えて、
nifi.propertiesファイルのnifi.variable.registry.propertiesフィールドで
Expression Languageで使用するカスタムプロパティを定義することもできる。- 接続プロパティ
- サーバープロパティ
- およびサービスプロパティ
-
データフローの処理と構成の柔軟性が向上する。
- Processorの組み合わせをフローのビルディング・ブロックとして再利用できる。
- 作成には、複数のコンポーネントを選択し、Operatorから[Create Template]ボタンを選択。
- Status Bar
- Component Statistics
- Bulletins
- イベントの詳細
- リネージュ・グラフ
公式文書に、
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].)
と書かれている。
ツールの仕様としては、どちらにも適合する可能性がある(EAI/ETL)。
バッチ指向なので適合しない可能性がある(性能検証などが必要)。
イベント指向なのでこちらのほうが適合し易い。
Remote Process GroupでHTTPなどのEndpointを定義してS2Sが可能。
- ExecuteScript(Apache NiFi - ExecuteScript Processor)の利用
- BRMSと組合せ
CEPも実は単純な事(SEP)しかしていないことが多い(分散処理の該当節を参照)。
- データマネージメント
- データのエンリッチメント
以下での利用が想定されている。
- IoTデバイス
- エッジ・コンピューティング
- System Workflow代替
- API Gatewayの変換部分の代替
- ファースト・ステップ(Apache NiFiファースト・ステップ)
- セカンド・ステップ(Apache NiFiセカンド・ステップ)
-
NiFi.rocks
http://www.nifi.rocks -
Fun with Apache NiFi
http://funnifi.blogspot.com -
Apache NiFiのコミッターに聞く
「OSSコミッター」になる秘訣 | Think IT(シンクイット)
https://thinkit.co.jp/article/12605 -
HortonworksのCTOが語る「Apache NiFi」
IoT分野で重視される理由 - ZDNet Japan
https://japan.zdnet.com/article/35070853/
-
Apache NiFi
https://nifi.apache.org -
Apache NiFi Documentation
https://nifi.apache.org/docs.html-
Processors(Apache NiFi - Processorの該当節を参照)
-
Controller Services
-
Reporting Tasks
-
General
- Overview / Getting Started / User Guide\n (URL は「step by step的な(参考リンク)」を参照)
- Expression Language Guide
- RecordPath Guide
- Admin Guide
-
Developer
-
Rest Api
https://nifi.apache.org/docs/nifi-docs/rest-api/index.htmlNiFiインスタンスをリアルタイムでコマンドおよび制御するためのプログラムによるアクセスを提供する。
-
Developer Guide
https://nifi.apache.org/developer-guide.htmlApache NiFi拡張の開発方法を理解し、コンポーネント開発の思考プロセスを説明するのに必要な情報を読者に提供する。
-
Apache NiFi In Depth
https://nifi.apache.org/docs/nifi-docs/html/nifi-in-depth.html高度なレベルのドキュメント。NiFiの実装と設計に関する決定を詳細に検討することを目的とする。
-
-
- Apache NiFi の紹介 #streamctjp
https://www.slideshare.net/techblogyahoo/apache-nifi-streamctjp - Apache NiFiと他プロダクトのつなぎ方
https://www.slideshare.net/SotaroKimura/apache-nifi - Kafkaを活用するためのストリーム処理の基本
https://www.slideshare.net/SotaroKimura/kafka-62558083
https://www.slideshare.net/KojiKawamura/presentations
-
そのデータフロー NiFiで楽にしてあげましょう
https://www.slideshare.net/KojiKawamura/nifi -
Apache NiFi 1.0 in Nutshell
https://www.slideshare.net/KojiKawamura/apache-nifi-10-in-nutshell -
Kafka含むデータ処理フローを NiFiで構築するさまを実演する5分間
https://www.slideshare.net/KojiKawamura/kafka-nifi5 -
Apache NiFiで、楽して、つながる、広がる IoTプロジェクト
https://www.slideshare.net/KojiKawamura/apache-nifi-iot -
What will be new in Apache NiFi 1.2.0
https://www.slideshare.net/KojiKawamura/whats-newnifi120 -
Apache NiFi 流れるデータにもスキーマを
https://www.slideshare.net/KojiKawamura/apache-nifi-78564874
-
Apache NiFiのそもそものコンセプトは?
https://qiita.com/kimutansk/items/59c9dacf01bd342295c3 -
ストリーム処理とは何か?+2016年の出来事
https://qiita.com/kimutansk/items/60e48ec15e954fa95e1c
- apache/nifi
https://github.com/apache/nifi
- hortonworks-gallery > nifi-templates
https://github.com/hortonworks-gallery/nifi-templates/tree/master/templates
-
Apache NiFi Overview
https://nifi.apache.org/docs/nifi-docs/html/overview.html -
Getting Started with Apache NiFi
https://nifi.apache.org/docs/nifi-docs/html/getting-started.html -
Apache NiFi User Guide
https://nifi.apache.org/docs/nifi-docs/html/user-guide.html
- Hortonworks DataFlow
https://docs.hortonworks.com/HDPDocuments/HDF3/HDF-3.1.1/bk_getting-started-with-apache-nifi/content/index.html
-
HDFハンズオン
-
kimutansk
https://qiita.com/kimutansk- データフローオーケストレーションツールApache NiFiとは?
https://qiita.com/kimutansk/items/a083fc963fbe31068cf8 - Apache NiFiで基本のデータフローを作成するには?
https://qiita.com/kimutansk/items/b235fe6cdd0c04ab7e10
- データフローオーケストレーションツールApache NiFiとは?
-
lethe2211
https://qiita.com/lethe2211- Apache NiFiについて調べてみた
https://qiita.com/lethe2211/items/a180373c5c25839bb470 - Apache NiFiのCustom Processorを作ってみた
https://qiita.com/lethe2211/items/ed2c97070b229fdca447
- Apache NiFiについて調べてみた
-
Apache NiFiでSQLを投げてみる
https://qiita.com/grachro/items/2933606bf5c276a87572
- Apache NiFiのファースト・ステップをしてみました。
https://www.osscons.jp/joq3c6bgf-537/ - Apache NiFiのセカンド・ステップをしてみました。
https://www.osscons.jp/jodqs94fu-537/
移行メモ
- FBP 用語対応表の 2 行目「Processor」の FBP 用語が 1 行目(FlowFile)と同じ「Information Packet」になっていたが、 FBP では処理ノードにあたるため「Black Box Process」に修正した。
- 「Attirbutes」は「Attributes」の誤記のため修正した。
- 「複数のファイルシステム格納場所を指定するできる。」→「指定できる。」、 「CEPも実は単純な事(SEP)しかシていない」→「しかしていない」、 「Logsatsh, Beats」→「Logstash, Beats」に修正した。
- 冒頭の「戻る」で括弧が閉じていなかったため補完した。
- 「監視」「データの起源・出所」配下は本文の無い見出しだったため箇条書きにまとめた。
- 同名の見出し(「その他」「step by step的な」「Qiita」「nifi.apache.org」「MiNiFi」)が 複数あり、GitHub Wiki ではアンカが衝突するため、括弧で文脈を補って一意にした。
- 「API Gateway」は本 Wiki(dotnetdevelopmentinfrastructure)側にも同名ページが 存在するため、そちらの API Gateway を指すようにした (マイクロソフト系技術情報 Wiki の API Gateway とは別ページ)。
Tags: 移行, Apache NiFi, データフロー, EAI, ETL, FlowFile, Processor, FBP, IoT, MiNiFi
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。