Skip to content

DNET_ApacheNiFi

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

Apache NiFi

概要

  • EAI/ETL系のデータフロー・オーケストレーション・ツール。

  • システム間のデータフロー自動化を行うために構築された。

  • NSA(アメリカ国家安全保障局)で開発されていたものが、
    2014年にオープンソースソフトウェアとして公開された。

  • 2015年7月にApacheのTopレベルプロジェクトになった。

特徴

  • もともと、Niagrafilesという名前だった。
    (ナイアガラの滝のようにドーッと降りてくる大量の水を処理するという発想。)

  • ツールの仕様としては、ETL(EAI/ETLの該当節を参照)ツールに近い(GUIを使ってデータとプロセスを定義する)。

  • しかし、ETLは本来、バッチ指向なので、イベント指向の EAI(EAI/ETLの該当節を参照)に近いと言える。

  • ビッグデータの3V(ビッグデータの該当節を参照)のコンテキストでは、

    • Apache Storm代替のエッジ・コンピューティング・ツール。
    • 「多様性」を重視している(カチッと整形されたデータではなくても様々なデータが処理可能)。

関連PJ

Registry

フロー定義を「as a code」として管理するサブ・プロジェクト

MiNiFi(関連PJ)

小さなフットプリントでデータフローを実行できるサブ・プロジェクト(MiNiFi

Apache Atlas

大量のデータがどこから来てどこに行くのか、コンプライアンスの観点で追跡するプロジェクト

設計コンセプト

FBP

  • 基本的な設計コンセプトは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は新たなコンポーネントの生成も可能になっている。

SEDA

  • この設計コンセプトはstaged event-driven architecture(SEDA)とも似ている。

  • staged event-driven architecture(SEDA)から様々な設計アイディアをえている。

  • 参考

用語

FlowFile

ユーザデータ

  • ユーザが処理および配信のためにもたらすデータ
  • ContentAttributesからなる。

Content

扱うデータの本体(バイナリ形式)

Attributes

  • ユーザーデータに関連付けられたKeyValueのメタ情報。

  • 以下の、3つの主要な利点がある。

    1. Processor毎に独自のAttributesを持つ。
      例えば、PutFile Processorであれば、ディレクトリとファイル名の属性を持つ。
    2. 起源・出所など、データに関する非常に貴重なcontextを提供する。
    3. 属性に基づいてフロー内でFlowFileのルーティングを決定できる。
  • 共通の属性

# 属性名 説明 変更可否
1 filename ファイル名
2 path ディレクトリ名
3 fileSize ファイルのバイト数 不可
4 uuid 他のFlowFilesとFlowFileを区別する汎用一意識別子 不可
5 entryDate FlowFileが作成された日時(UTC) 不可
6 lineageStartDate 先祖の連鎖の最古の日時(UTC) 不可
  • 属性の設定

    • 属性を抽出するProcessorがある。

      • 特定のデータフォーマットを理解し、
      • FlowFileのコンテンツから適切な情報を抽出し、
      • その情報を保持する属性を作成し、
      • データのルーティングや処理方法の決定を行う。
    • ユーザー定義属性をするProcessorがある。

      • フロー内の特定の場所にある各FlowFileに
        独自のユーザー定義属性を追加することも一般的。
      • これには、UpdateAttribute Processorを使用する。
  • 属性の利用

    • 属性を使用した分岐

      • 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})}
        
    • 参考

Processor

  • データフローを記述したグラフ(DAG)におけるノード(節点・頂点)に相当する。

  • FlowFileにどんな処理を施すか」を表す、最も重要なビルディング・ブロック。

    • FlowFilesの作成、送信、受信、変換、ルーティング、分割、マージ、および処理を担当する。

    • 組込Processorに加え、カスタムProcessorを開発して組込むことも可能。

詳細

Apache NiFi - Processor

Connection

データフローを記述したグラフ(DAG)におけるエッジ(枝・辺)の属性に相当する。

Relationship

  • Processorが行った処理に応じて,どのProcessorにどのFlowFileを届けるか」を表す。

  • Processorごとにあらかじめ定義されている。

    • original
    • failure
    • , etc.
  • RouteOnAttribute Processorに、Expression Languageの式を設定すると公開される。

    • 一致
    • 不一致

Selected Prioritizers

キューから取り出す優先順位は、大方、

  • 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上の主なコンポーネント。

Web Server

HTTPベースのコマンドと制御APIをホストする。

Extensions

  • 様々なタイプの拡張がある。
  • JVM内で動作して実行される。

Flow Controller

操作の頭脳

  • Extensions
    • スレッド実行
    • リソース受け取りのスケジューリング
    • Processor間でのコンテキストの共有
      • HTTPContext
      • データストアとの接続

FlowFile Repository

  • 現在アクティブなFlowFileの状態を追跡する場所。
  • リポジトリの実装はプラガブル。
    • デフォルトの場所は、...\nifi-n.n.n\flowfile_repository

Content Repository

  • FlowFileの実際のコンテンツバイトが存在する場所。
  • リポジトリの実装はプラガブル。
    • ファイルシステムにデータのブロックを格納する。
    • 複数のファイルシステム格納場所を指定できる。
    • デフォルトの場所は、...\nifi-n.n.n\content_repository

Provenance Repository

  • すべてのProvenance イベント・データが格納される場所。
  • リポジトリの構成はプラガブル。
    • デフォルトの構成では、1つ以上の物理ディスク・ボリュームを使用
    • 各ロケーション内でイベントデータが索引付けされ、検索可能。

クラスタリング

  • 1.0以降、Apache ZooKeeperのクラスタ内で動作できる。
  • 各ノードは、データに対して同じタスクを実行する。
  • しかし、それぞれ異なるデータセットで動作する。

ZooKeeper

Apache ZooKeeper

コーディネータ

  • フェイルオーバーはZooKeeperによって自動的に処理される。
  • すべてのノードは、ハートビートとステータス情報をコーディネータに報告。
  • コーディネータはノードの切断と接続を行う。

プライマリノード

  • DataFlowマネージャとして、UIを介してクラスタとやりとりできる。
  • 変更は、クラスタ内のすべてのノードに複製され、複数のエントリポイントが可能になる。

その他

カスタム・プロパティ

  • 属性の使用に加えて、
    nifi.propertiesファイルのnifi.variable.registry.propertiesフィールドで
    Expression Languageで使用するカスタムプロパティを定義することもできる。

    • 接続プロパティ
    • サーバープロパティ
    • およびサービスプロパティ
  • データフローの処理と構成の柔軟性が向上する。

Template

  • 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

ツールの仕様としては、どちらにも適合する可能性がある(EAI/ETL)。

ETL

バッチ指向なので適合しない可能性がある(性能検証などが必要)。

EAI

イベント指向なのでこちらのほうが適合し易い。

WebAPI

簡易WebAPI開発

Remote Process GroupでHTTPなどのEndpointを定義してS2Sが可能。

複雑な業務プロセスを開発

ビッグデータ

Apache Storm代替

CEPも実は単純な事(SEP)しかしていないことが多い(分散処理の該当節を参照)。

IoT

エッジ

  • データマネージメント
  • データのエンリッチメント

デバイス(MiNiFi)

以下での利用が想定されている。

  • IoTデバイス
  • エッジ・コンピューティング

その他(ユースケース)

  • System Workflow代替
  • API Gatewayの変換部分の代替

step by step的な

参考

nifi.apache.org

SlideShare

KojiKawamura

https://www.slideshare.net/KojiKawamura/presentations

Qiita

kimutansk

https://qiita.com/kimutansk

GitHub.com

Apache

Hortonworks

step by step的な(参考リンク)

nifi.apache.org(step by step)

hortonworks.com

ijokarumawak/hdf-tutorials-ja

Qiita(step by step)

MiNiFi

MiNiFi

OSSコンソーシアム

開発基盤部会 Blog

移行メモ

  • 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

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally