Apache Nifiのしくみ—データフローをサーフィンし、それに溺れないでください

前書き

それはクレイジーな水の流れです。アプリケーションがクレイジーなデータストリームを処理するのと同じように。あるストレージから別のストレージへのデータのルーティング、検証ルールの適用、データガバナンスの問題への対処、ビッグデータエコシステムの信頼性は、すべて自分で行うと正しく理解するのが困難です。

朗報です。データフローソリューションを最初から構築する必要はありません— Apache NiFiが戻ってきました!

この記事の終わりに、あなたはNiFiの専門家になり、データパイプラインを構築する準備が整います。

この記事で取り上げる内容:

  • Apache NiFiとは何か、どのような状況でそれを使用する必要があるか、そしてNiFiで理解するための重要な概念は何ですか。

私がカバーしないもの:

  • NiFiクラスターのインストール、展開、監視、セキュリティ、および管理。

ここにあなたの便宜のために目次があります、あなたの好奇心があなたを連れて行くところにまっすぐに進んでください。NiFiを初めて使用する場合は、この記事を指定された順序で読むことをお勧めします。

目次

  • I — Apache NiFiとは何ですか?

    -NiFiの定義

    -なぜNiFiを使用するのですか?

  • II —顕微鏡下でのApache Nifi

    -FlowFile

    -プロセッサ

    -プロセスグループ

    -接続

    -フローコントローラー

  • 結論と行動を促すフレーズ

Apache NiFiとは何ですか?

Apache NifiプロジェクトのWebサイトで、次の定義を見つけることができます。

データを処理および配布するための、使いやすく、強力で、信頼性の高いシステム。

そこでキーワードを分析してみましょう。

NiFiの定義

データの処理と配布

それがニフィの要点です。システム間でデータを移動し、このデータを処理するためのツールを提供します。

Nifiは、多種多様なデータソースと形式を処理できます。1つのソースからデータを取り込み、変換して、別のデータシンクにプッシュします。

使いやすい

プロセッサ—ボックス—コネクタでリンク—矢印はフローを作成します。N iFiは、フローベースのプログラミング体験を提供します。

Nifiを使用すると、実装に数百行のソースコードを必要とする一連のデータフロー操作を一目で理解できます。

以下のパイプラインを検討してください。

上記のデータフローをNiFiで変換するには、NiFiグラフィカルユーザーインターフェイスに移動し、3つのコンポーネントをキャンバスにドラッグアンドドロップします。

それでおしまい。ビルドには2分かかります。

さて、同じことをするコードを書くと、同様の結果を達成するのに数百行かかる可能性があります。

フローベースのアプローチの場合のように、コードを介してパイプラインの本質をキャプチャすることはありません。Nifiは、データパイプラインを構築するためにより表現力があります。それを行うように設計されています。

強力

NiFiは多くのプロセッサを提供します箱から出して(Nifi 1.9.2では293)。あなたは巨人の肩に乗っています。これらの標準プロセッサは、発生する可能性のあるユースケースの大部分を処理します。

NiFiは高度な並行性を備えていますが、その内部は関連する複雑さをカプセル化しています。プロセッサは、並列プログラミングに固有の複雑さを隠す高水準の抽象化を提供します。プロセッサは同時に実行され、プロセッサの複数のスレッドにまたがって負荷に対処できます。

同時実行性は、開きたくないコンピューティングパンドラの箱です。NiFiは、並行性の複雑さからパイプラインビルダーを便利に保護します。

信頼性のある

NiFiを裏付ける理論は新しいものではありません。それは確かな理論的アンカーを持っています。SEDAのようなモデルに似ています。

データフローシステムの場合、取り組むべき主要なトピックの1つは信頼性です。どこかに送信されたデータが効果的に受信されることを確認する必要があります。

NiFiは、任意の時点でシステムの状態を追跡する複数のメカニズムを通じて、高レベルの信頼性を実現します。これらのメカニズムは構成可能であるため、アプリケーションに必要なレイテンシーとスループットの間で適切なトレードオフを行うことができます。

NiFiは、系統と来歴の機能を使用して、各データの履歴を追跡します。これにより、各情報でどのような変換が行われるかを知ることができます。

Apache Nifiによって提案されたデータリネージソリューションは、データパイプラインを監査するための優れたツールであることが証明されています。欧州連合などの国境を越えた関係者が正確なデータ処理をサポートするためのガイドラインを提案する状況で、ビッグデータとAIシステムへの信頼を高めるには、データリネージ機能が不可欠です。

なぜNifiを使用するのですか?

まず、私はNiFiを伝道するためにここにいるのではないことを明確にしたいと思います。私の目標は、データパイプラインを構築するための最良の方法について情報に基づいた決定を下せるように、十分な要素を提供することです。

ソリューションのディメンションを作成するときは、ビッグデータの4つのVを覚えておくと便利です。

  • ボリューム—どの規模で運用していますか?大きさの順に、数ギガバイトまたは数百ペタバイトに近いですか?
  • 多様性—データソースはいくつありますか?データは構造化されていますか?はいの場合、スキーマは頻繁に異なりますか?
  • 速度—処理するイベントの頻度はどれくらいですか?クレジットカードでの支払いですか?IoTデバイスから送信される毎日のパフォーマンスレポートですか?
  • 信憑性—データを信頼できますか?または、操作する前に複数のクリーニング操作を適用する必要がありますか?

NiFiは、複数のデータソースからデータをシームレスに取り込み、データ内のさまざまなスキーマを処理するメカニズムを提供します。したがって、データの多様性が高い場合に光ります。

Nifiは、データの信憑性低い場合に特に価値があります。データをクリーンアップおよびフォーマットするための複数のプロセッサを提供するため。

構成オプションにより、Nifiは幅広いボリューム/速度の状況に対応できます。

データルーティングソリューションのアプリケーションの増加するリスト

新しい規制、モノのインターネットの台頭、およびそれが生成するデータの流れは、ApacheNiFiなどのツールの関連性を強調しています。

  • マイクロサービスは流行しています。これらの疎結合サービスでは、データはサービス間の契約です。Nifiは、これらのサービス間でデータをルーティングするための堅牢な方法です。
  • モノのインターネット多数のデータをクラウドにもたらします。エッジからクラウドへのデータの取り込みと検証は、NiFiが効率的に対処できる多くの新しい課題をもたらします(主にMiniFi、エッジデバイス用のNiFiプロジェクトを通じて)
  • ビッグデータ経済を再調整するために、新しいガイドラインと規制が導入されました。監視を強化するこのコンテキストでは、企業がデータパイプラインの概要を明確にすることが重要です。たとえば、NiFiデータ系統は、規制への準拠に向けた道のりに役立ちます。

ビッグデータの専門家と他の専門家の間のギャップを埋める

ユーザーインターフェイスからわかるように、NiFiで表現されたデータフローは、データパイプラインについての通信に最適です。これは、組織のメンバーがデータパイプラインで何が起こっているかについてより知識を深めるのに役立ちます。

  • アナリストは、なぜこのデータがそのようにここに到着するのかについての洞察を求めていますか?一緒に座って、流れの中を歩きます。5分で、Extract Transform and Load -ETL-パイプラインについての深い理解を誰かに与えることができます。
  • 作成した新しいエラー処理フローについて、同僚からのフィードバックが必要ですか?NiFiは、エラーパスを有効な結果と同じくらい可能性が高いと見なすように設計上の決定を下します。フローレビューは、従来のコードレビューよりも短いと予想されます。

あなたはそれを使うべきですか?そうですね?

NiFiはそれ自体を使いやすいとブランド化しています。それでも、それはエンタープライズデータフロープラットフォームです。それはあなたが削減されたサブセットだけを必要とするかもしれない機能の完全なセットを提供します。スタックに新しいツールを追加することは良性ではありません。

ゼロから始めて、信頼できるデータソースからいくつかのデータを管理する場合は、Extract Transform and Load —ETLパイプラインを設定する方がよい場合があります。たぶん、データベースからの変更データキャプチャといくつかのデータ準備スクリプトだけで十分です。

一方、既存のビッグデータソリューションが使用されている環境(ストレージ、処理、メッセージングなど)で作業している場合、NiFiはそれらとうまく統合され、すぐに成功する可能性が高くなります。すぐに使用できるコネクタを他のビッグデータソリューションに活用できます。

新しいソリューションに誇大宣伝されるのは簡単です。要件をリストし、できるだけ簡単にニーズに答えるソリューションを選択してください

Apache NiFiの非常に高い全体像を見てきましたので、その主要な概念を見て、その内部を分析します。

顕微鏡下でのApacheNifi

「NiFiはボックスと矢印プログラミングです」は、全体像を伝えるのに問題ないかもしれません。ただし、NiFiを使用して操作する必要がある場合は、NiFiがどのように機能するかについてもう少し理解する必要があります。

この第2部では、スキーマを使用したApacheNiFiの重要な概念について説明します。このブラックボックスモデルは、後であなたにとってブラックボックスにはなりません。

ApacheNiFiの開封

NiFiを起動すると、そのWebインターフェイスにアクセスします。Web UIは、データパイプラインを設計および制御するための青写真です。

Nifiでは、接続によって相互にリンクされたプロセッサを組み立てます。前に紹介したサンプルデータフローには、3つのプロセッサがあります。

NiFiキャンバスユーザーインターフェイスは、パイプラインビルダーが進化するフレームワークです。

Nifiの用語を理解する

Nifiでデータフローを表現するには、最初にその言語を習得する必要があります。心配はいりません。その背後にある概念を理解するには、いくつかの用語で十分です。

ブラックボックスはプロセッサと呼ばれ接続という名前のキューを介してFlowFilesという名前の情報のチャンクを交換します。最後に、FlowFile Controllerは、これらのコンポーネント間のリソースの管理を担当します。

これが内部でどのように機能するかを見てみましょう。

FlowFile

NiFiでは、FlowFileパイプラインのプロセッサを移動する情報パケットです。

FlowFileには2つの部分があります。

  • キー/値のペアである属性。たとえば、ファイル名、ファイルパス、および一意の識別子は標準の属性です。
  • コンテンツ、バイトのストリームへの参照は、FlowFileコンテンツを構成します。

FlowFileにはデータ自体は含まれていません。これにより、パイプラインのスループットが大幅に制限されます。

代わりに、FlowFileは、ローカルストレージのどこかに格納されているデータを参照するポインターを保持します。この場所はコンテンツリポジトリと呼ばれます

コンテンツにアクセスするために、FlowFileはコンテンツリポジトリからリソースを要求します。後者は、コンテンツがある場所からの正確なディスクオフセットを追跡し、それをFlowFileにストリーミングします。

すべてのプロセッサが操作を実行するためにFlowFileのコンテンツにアクセスする必要はありません。たとえば、2つのFlowFileのコンテンツを集約するために、コンテンツをメモリにロードする必要はありません。

プロセッサがFlowFileのコンテンツを変更すると、以前のデータが保持されます。NiFiは書き込み時にコピーし、コンテンツを新しい場所にコピーしながら変更します。元の情報は、コンテンツリポジトリにそのまま残されます。

FlowFileのコンテンツを圧縮するプロセッサについて考えてみます。元のコンテンツはコンテンツリポジトリに残り、圧縮されたコンテンツ用に新しいエントリが作成されます。

コンテンツリポジトリは、最終的に圧縮されたコンテンツへの参照を返します。FlowFileは、圧縮データを指すように更新されます。

以下の図は、FlowFilesのコンテンツを圧縮するプロセッサを使用した例をまとめたものです。

信頼性

NiFiは信頼できると主張していますが、実際にはどのようになっていますか?現在使用されているすべてのFlowFileの属性、およびそれらのコンテンツへの参照は、FlowFileリポジトリに保存されます。

パイプラインのすべてのステップで、Flowfileへの変更は、実行される前に、最初にFlowFileリポジトリの先行書き込みログに記録されます。

システムに現在存在するFlowFileごとに、FlowFileリポジトリは以下を格納します。

  • FlowFile属性
  • FlowFileリポジトリにあるFlowFileのコンテンツへのポインタ
  • FlowFileの状態。例:この時点でフローファイルはどのキューに属しますか。

FlowFileリポジトリは、フローの最新の状態を提供します。したがって、これは停止から回復するための強力なツールです。

NiFiは、フロー内のすべてのFlowFileの完全な履歴を追跡するための別のツールである来歴リポジトリを提供します。

来歴リポジトリ

FlowFileが変更されるたびに、NiFiはこの時点でFlowFileとそのコンテキストのスナップショットを取得します。NiFiでのこのスナップショットの名前は、来歴イベントです。来歴リポジトリは、来歴イベントを記録します。

来歴により、データの系統をたどり、NiFiで処理されるすべての情報の完全な管理過程を構築することができます。

データの完全な系統を提供することに加えて、来歴リポジトリは、任意の時点からデータを再生することも提供します。

待ってください、FlowFileリポジトリと来歴リポジトリの違いは何ですか?

FlowFileリポジトリと来歴リポジトリの背後にある考え方は非常に似ていますが、同じ問題に対処していません。

  • FlowFileリポジトリは、システムで使用中のFlowFileの最新の状態のみを含むログです。これはフローの最新の画像であり、停止から迅速に回復することを可能にします。
  • 一方、来歴リポジトリは、フロー内にあるすべてのFlowFileのライフサイクル全体を追跡するため、より網羅的です。

FlowFileリポジトリを備えたシステムの最新の画像しかない場合、Provenanceリポジトリは写真のコレクション(ビデオ)を提供します。過去の任意の時点に巻き戻し、データを調査し、特定の時間から操作を再生できます。データの完全な系統を提供します。

FlowFileプロセッサ

プロセッサが動作を実行するブラックボックスです。プロセッサは、FlowFileの属性とコンテンツにアクセスして、あらゆる種類のアクションを実行できます。これらを使用すると、データ入力、標準のデータ変換/検証タスクで多くの操作を実行し、このデータをさまざまなデータシンクに保存できます。

NiFiには、インストール時に多くのプロセッサが付属しています。ユースケースに最適なものが見つからない場合でも、独自のプロセッサを構築することは可能です。カスタムプロセッサの作成は、このブログ投稿の範囲外です。

プロセッサは、1つのタスクを実行する高レベルの抽象化です。この抽象化は、並行プログラミングとエラー処理メカニズムの実装に固有の問題からパイプラインビルダーを保護するため、非常に便利です。

プロセッサは、動作を微調整するために、複数の構成設定を持つインターフェイスを公開します。

これらのプロセッサのプロパティは、NiFiとアプリケーション要件のビジネスの現実との間の最後のリンクです。

悪魔は細部にあり、パイプラインビルダーは、期待される動作に一致するようにこれらのプロパティを微調整することにほとんどの時間を費やしています。

スケーリング

プロセッサごとに、同時に実行する同時タスクの数を指定できます。このように、フローコントローラはこのプロセッサにより多くのリソースを割り当て、スループットを向上させます。プロセッサはスレッドを共有します。1つのプロセッサがより多くのスレッドを要求すると、他のプロセッサは実行可能なスレッドが少なくなります。Flow Controllerがスレッドを割り当てる方法の詳細については、こちらをご覧ください。

水平スケーリング。スケーリングするもう1つの方法は、NiFiクラスター内のノードの数を増やすことです。クラスタリングサーバーを使用すると、コモディティハードウェアを使用して処理能力を向上させることができます。

プロセスグループ

これは、プロセッサとは何かを見てきましたので、簡単です。

それらの接続と一緒にまとめられたプロセッサの束は、プロセスグループを形成することができます。データを送受信できるように、入力ポートと出力ポートを追加します。

プロセッサグループは、既存のプロセッサに基づいて新しいプロセッサを作成する簡単な方法です。

接続

接続は、プロセッサ間のキューです。これらのキューにより、プロセッサはさまざまなレートで対話できます。水道管のサイズが異なるように、接続の容量も異なる場合があります。

プロセッサは、実行する操作に応じて異なる速度でデータを消費および生成するため、接続はFlowFilesのバッファとして機能します。

接続に含めることができるデータの数には制限があります。同様に、水道管がいっぱいになると、水を追加できなくなるか、水が溢れます。

NiFiでは、接続を通過するFlowFileの数とそれらの集約コンテンツのサイズに制限を設定できます。

接続が処理できるよりも多くのデータを送信するとどうなりますか?

FlowFilesの数またはデータの量が定義されたしきい値を上回った場合、背圧が印加されます。フローコントローラは、キューに空きができるまで、前のプロセッサが再度実行されるようにスケジュールしません。

2つのプロセッサ間で10000FlowFilesの制限があるとしましょう。ある時点で、接続には7000個の要素が含まれます。限界は10 000であるので、それはOKであるP1がまだへの接続を介してデータを送信することができるP2

ここで、プロセッサ1が4000個の新しいFlowFileを接続に送信するとします。

7 0000 + 4 000 = 11000→接続しきい値である10000FlowFilesを超えています。

制限はソフト制限であり、超過する可能性があることを意味します。ただし、前のプロセッサであるP1は、コネクタがしきい値(10000 FlowFiles)を下回るまでスケジュールされません。

この簡略化された例は、背圧がどのように機能するかについての全体像を示しています。

処理するデータの量と速度に適した接続しきい値を設定する必要があります。4つの対を覚えておいてください

制限を超えるという考えは奇妙に聞こえるかもしれません。FlowFilesまたは関連データの数がしきい値を超えると、スワップメカニズムがトリガーされます。

背圧に関する別の例として、このメールスレッドが役立ちます。

FlowFilesの優先順位付け

NiFiのコネクタは高度に構成可能です。キュー内のFlowFilesに優先順位を付ける方法を選択して、次に処理するFlowFilesを決定できます。

利用可能な可能性の中には、たとえば、先入れ先出し注文-FIFOがあります。ただし、 FlowFileから選択した属性を使用して、着信パケットに優先順位を付けることもできます。

フローコントローラー

フローコントローラーは、すべてをまとめる接着剤です。プロセッサにスレッドを割り当てて管理します。それがデータフローを実行するものです。

また、Flow Controllerを使用すると、ControllerServicesを追加できます。

これらのサービスは、データベース接続やクラウドサービスプロバイダーの資格情報などの共有リソースの管理を容易にします。コントローラサービスはデーモンです。これらはバックグラウンドで実行され、プロセッサが実行するための構成、リソース、およびパラメーターを提供します。

たとえば、AWS認証情報プロバイダーサービスを使用して、プロセッサレベルでの認証情報を気にすることなく、サービスがS3バケットと対話できるようにすることができます。

プロセッサーの場合と同様に、多数のコントローラーサービスをすぐに利用できます。

コントローラサービスの詳細については、この記事を確認してください。

結論と行動を促すフレーズ

この記事では、エンタープライズデータフローソリューションであるNiFiについて説明しました。これで、NiFiの機能と、アプリケーションでNiFiのデータルーティング機能を活用する方法を深く理解できました。

これを読んでいるなら、おめでとう!あなたは今、世界の人口の99.99%よりもNiFiについてもっと知っています。

練習は完璧を作る。独自のパイプラインの構築を開始するために必要なすべての概念を習得します。それを簡単に; 最初に機能させます。

これは、この記事を書くために私の仕事の経験に加えて編集したエキサイティングなリソースのリストです。

リソース?

全体像

複雑なエコシステムでデータパイプラインを設計するには、複数の分野に習熟している必要があるため、「データ集約型アプリケーションの設計」という本を強くお勧めします。マーティンクレップマンから。それは基本をカバーしています。

  • Martinの本で引用されているすべての参照を含むチートシートは、彼のGithubリポジトリで入手できます。

このチートシートは、どのようなトピックを詳細に学習したいかをすでに知っていて、高品質の資料を見つけたい場合に開始するのに最適な場所です。

ApacheNifiの代替

他のデータフローソリューションが存在します。

オープンソース:

  • ストリームセットはNiFiに似ています。良い比較はこのブログで利用可能です

既存のクラウドプロバイダーのほとんどは、データフローソリューションを提供しています。これらのソリューションは、このクラウドプロバイダーから使用する他の製品と簡単に統合できます。同時に、それはあなたを特定のベンダーにしっかりと結びつけます。

  • Azure Data Factory、Microsoftソリューション
  • IBMにはInfoSphereDataStageがあります
  • アマゾンはデータパイプラインという名前のツールを提案します
  • Googleはデータフローを提供しています
  • Alibaba Cloudは、同様の機能を備えたサービスDataWorksを導入します

NiFi関連リソース

  • Nifiの公式ドキュメント、特にNifiの詳細セクションは金鉱です。
  • Nifiユーザーのメーリングリストに登録することも、情報を得るのに最適な方法です。たとえば、この会話はバックプレッシャーを説明しています。
  • ビッグデータソリューションプロバイダーであるHortonworksには、ApacheNifiの魅力的なリソースとハウツーが満載のコミュニティWebサイトがあります

    —この記事では、コネクタ、ヒープの使用法、およびバックプレッシャについて詳しく説明します。

    —これは、NiFiクラスターを展開する際のディメンションのベストプラクティスを共有しています。

  • NiFiブログでは、NiFiの使用パターンに関する多くの洞察と、パイプラインの構築方法に関するヒントを紹介しています。
  • クレームチェックパターンの説明
  • Apache Nifiの背後にある理論は新しいものではなく、NifiDocで参照されているSedaは非常に関連性があります

    —マット・ウェルッシュ。バークレー。 SEDA:条件の整ったスケーラブルなインターネットサービスのアーキテクチャ[オンライン]。取得:2019年4月21日、// www.mdw.la/papers/seda-sosp01.pdfから