Apache NiFi Statelessの使い方

今回は以前別の記事で紹介したApache NiFiについて、通常とは違う処理エンジンとして実装されているStatelessエンジンについて簡単に紹介します。

Apache NiFiについて紹介した記事は以下のリンクからどうぞ。 blog.jbs.co.jp

NiFi Statelessとは

バージョン1.10.0で実装された機能で、デフォルトのNiFiランタイムとは別に開発された軽量なStatelessランタイムを使用して実行され、パフォーマンス/効率/スケーラビリティが非常に良いものとなっています。

初期段階だと、別のバイナリを起動して動かさなければいけない等、使用しにくいところがあったのですが、NiFiがアップデートされるにしたがってどんどん使いやすくアップデートされていっています。

NiFI Statelessの特徴

NiFi Statlessには以下の様な特徴があります。

  • ディスク上のリポジトリを必要とせず、データは基本的にメモリ上に乗っている
  • ディスク上に永続化されていないため、KafkaのExactly Onceのようなデータを永続化されたくない仕組みにも使用することが可能
  • 通常のNiFiエンジンとは別のエンジンのため、NiFiエンジン上で動作する別のフローの動作によるリソース競合の影響を受けにくい
  • ディスク上に永続化されていない為、Statelessで実行されているフロー上での処理中にNiFiに障害が発生し落ちてしまった場合、復旧ができない

NiFI Statelessのメリットデメリット

デフォルト Stateless
メリット ディスクに永続化されているため
データの損失が発生しづらい
ディスクへの書き込みがボトルネックにならず
動作が高速
デメリット ディスクへの書き込みが発生するため
ボトルネックになり性能が出ない場合がある
データの損失が発生する可能性がある

NiFi Statelessの使い方

今回使用した環境は、Windows上で以下のバージョンのNiFiを実行して確認しています。

  • NiFi 1.24.0
  • NiFi 2.0.0-M2

NiFi 1.xとNiFi 2.xでStatelessでの実行方法が違うため、それぞれの手順を紹介します。

NiFi 1.x

  1. まず、ProcessGroupを配置して、その中にStatelessエンジンで動かしたいフローを構築します。
     
    ProcessGroup
     
    サンプルフロー
     
  2. ProcessGroupを右クリックして、「Download flow definition」内の項目をクリックしてDataflowファイルをダウンロードします。  
    Dataflowファイルダウンロード
  3. 「ExecuteStateless」プロセッサを配置します。  
    ExecuteStatelessプロセッサ
  4. ダウンロードしたファイルのパスをセットし、「Content Storage Strategy」でContent(Flowfileのデータ)をメモリに乗せるかディスクに乗せるかを設定します。  
    ExecuteStateless設定画面
  5. 「ExecuteStateless」プロセッサをStartします。
    ExecuteStatelessプロセッサ Start状態

NiFi 2.x

NiFi 2.xでは、ProcessGroupから実行エンジンを選択するだけで、Statelessで実行することができます。

  1. Statelessで実行したいProcessGroupを右クリックして、Configureをクリックします。
    ProcessGroup NiFi 2.x
    ProcessGroup NiFi 2.x メニュー
  2. 「Execution Engine」の項目をStatelessに設定します。
    デフォルトでは親ProcessGroupの実行エンジンの設定を継承する設定となっています。
    ProcessGroup設定画面 エンジン選択
    ProcessGroup設定画面 エンジン選択後
  3. ProcessGroupを右クリックしてStartします。
    ProcessGroup NiFi 2.x Start

まとめ

以上の手順で、NiFi statelessを使用することができます。

これまでのNiFiエンジンと比べてメリットデメリットありますが、うまく使えばパフォーマンス改善にも使用できそうな機能です。

是非触ってみてください。

執筆担当者プロフィール
里見 悠太

里見 悠太(日本ビジネスシステムズ株式会社)

Hadoop/NiFi周りを得意としています。 SparkやKafkaを使ったデータフローについて勉強中です。

担当記事一覧