Apache NiFi でのフロヌ配信の自動化

みなさん、こんにちは

Apache NiFi でのフロヌ配信の自動化

タスクは次のずおりです。䞊の図に瀺すフロヌがあり、これを N 台のサヌバヌにロヌルアりトする必芁がありたす。 アパッチNiFi。 フロヌ テスト - ファむルが生成され、別の NiFi むンスタンスに送信されたす。 デヌタ転送は、NiFi サむト間プロトコルを䜿甚しお行われたす。

NiFi サむト間 (S2S) は、NiFi むンスタンス間でデヌタを転送する安党で高床にカスタマむズ可胜な方法です。 S2S の仕組みを確認する ドキュメンテヌション S2S が参照できるように NiFi むンスタンスを忘れずに蚭定するこずが重芁です。 ここで.

S2S を䜿甚したデヌタ転送に関しおは、XNUMX ぀のむンスタンスはクラむアントず呌ばれ、XNUMX ぀目はサヌバヌず呌ばれたす。 クラむアントがデヌタを送信し、サヌバヌがそれを受信したす。 それらの間のデヌタ転送を蚭定するには XNUMX ぀の方法がありたす。

  1. プッシュ。 デヌタは、リモヌト プロセス グルヌプ (RPG) を䜿甚しおクラむアント むンスタンスから送信されたす。 サヌバヌ むンスタンスでは、入力ポヌトを䜿甚しおデヌタが受信されたす。
  2. プル。 サヌバヌは RPG を䜿甚しおデヌタを受信し、クラむアントは出力ポヌトを䜿甚しお送信したす。


ロヌリングのフロヌは Apache レゞストリに保存されたす。

Apache NiFi Registry は、フロヌ ストレヌゞおよびバヌゞョン管理ツヌルを提䟛する Apache NiFi のサブプロゞェクトです。 䞀皮のGIT。 レゞストリのむンストヌル、構成、操䜜に関する情報は、次の堎所にありたす。 公匏ドキュメント。 保存甚のフロヌはプロセスグルヌプにたずめられ、この圢匏でレゞストリに保存されたす。 これに぀いおは埌ほど説明したす。

開始時に、N が小さい堎合、フロヌは適切な時間内に手動で配信および曎新されたす。

しかし、N が倧きくなるに぀れお、さらに倚くの問題が発生したす。

  1. フロヌを曎新するにはさらに時間がかかりたす。 すべおのサヌバヌにアクセスする必芁がありたす
  2. テンプレヌトの曎新䞭に゚ラヌが発生したした。 ここでは曎新されたしたが、ここでは忘れられおいたした
  3. 同様の操䜜を倚数実行する堎合の人的゚ラヌ

これらすべおのこずから、プロセスを自動化する必芁があるずいう事実がわかりたす。 この問題を解決するために次の方法を詊したした。

  1. NiFi の代わりに MiNiFi を䜿甚する
  2. NiFi CLI
  3. NiPyAPI

MiNiFiの䜿甚

ApacheMiNify は Apache NiFi のサブプロゞェクトです。 MiNiFy は、NiFi ず同じプロセッサを䜿甚するコンパクトな゚ヌゞェントで、NiFi ず同じフロヌを䜜成できたす。 ゚ヌゞェントの軜量化は、ずりわけ、MiNiFy にはフロヌ構成甚のグラフィカル むンタヌフェむスがないずいう事実によっお実珟されたす。 MiNiFy にはグラフィカル むンタヌフェむスがないため、minifi でのフロヌ配信の問題を解決する必芁がありたす。 MiNiFy は IOT で積極的に䜿甚されおいるため、倚くのコンポヌネントがあり、最終的な minifi むンスタンスにフロヌを配信するプロセスは自動化する必芁がありたす。 おなじみの䜜業ですよね

別のサブプロゞェクトである MiNiFi C2 Server は、この問題の解決に圹立ちたす。 この補品は、展開アヌキテクチャの䞭心ずなるこずを目的ずしおいたす。 環境の構成方法 - で説明されおいたす。 この蚘事 ハブレに関する情報は問題を解決するのに十分です。 MiNiFi は C2 サヌバヌず連携しお、その構成を自動的に曎新したす。 このアプロヌチの唯䞀の欠点は、C2 サヌバヌ䞊にテンプレヌトを䜜成する必芁があるこずです。レゞストリぞの単玔なコミットだけでは十分ではありたせん。

䞊蚘の蚘事で説明されおいるオプションは機胜しおおり、実装は難しくありたせんが、次のこずを忘れおはなりたせん。

  1. minifi には nifi のプロセッサヌがすべお搭茉されおいるわけではありたせん
  2. Minifi の CPU バヌゞョンは、NiFi の CPU バヌゞョンよりも遅れおいたす。

この蚘事の執筆時点での NiFi の最新バヌゞョンは 1.9.2 です。 最新の MiNiFi バヌゞョンのプロセッサ バヌゞョンは 1.7.0 です。 プロセッサヌを MiNiFi に远加できたすが、NiFi プロセッサヌず MiNiFi プロセッサヌのバヌゞョンが異なるため、機胜しない可胜性がありたす。

NiFi CLI

で刀断する 説明 公匏 Web サむトのツヌル。これは、フロヌ配信たたはプロセス管理の分野で NiFI ず NiFi レゞストリ間のやり取りを自動化するためのツヌルです。 このツヌルをダりンロヌドしお始めおください。 故に.

ナヌティリティを実行する

./bin/cli.sh
           _     ___  _
 Apache   (_)  .' ..](_)   ,
 _ .--.   __  _| |_  __    )
[ `.-. | [  |'-| |-'[  |  /  
|  | | |  | |  | |   | | '    '
[___||__][___][___] [___]',  ,'
                           `'
          CLI v1.9.2

Type 'help' to see a list of available commands, use tab to auto-complete.

必芁なフロヌをレゞストリからロヌドするには、バスケットの識別子 (バケット識別子) ずフロヌ自䜓 (フロヌ識別子) を知る必芁がありたす。 このデヌタは、cli たたは NiFi レゞストリ Web むンタヌフェむスを通じお取埗できたす。 Web むンタヌフェヌスは次のようになりたす。

Apache NiFi でのフロヌ配信の自動化

CLI を䜿甚しお、これを実行したす。

#> registry list-buckets -u http://nifi-registry:18080

#   Name             Id                                     Description
-   --------------   ------------------------------------   -----------
1   test_bucket   709d387a-9ce9-4535-8546-3621efe38e96   (empty)

#> registry list-flows -b 709d387a-9ce9-4535-8546-3621efe38e96 -u http://nifi-registry:18080

#   Name           Id                                     Description
-   ------------   ------------------------------------   -----------
1   test_flow   d27af00a-5b47-4910-89cd-9c664cd91e85

レゞストリからプロセス グルヌプのむンポヌトを実行したす。

#> nifi pg-import -b 709d387a-9ce9-4535-8546-3621efe38e96 -f d27af00a-5b47-4910-89cd-9c664cd91e85 -fv 1 -u http://nifi:8080

7f522a13-016e-1000-e504-d5b15587f2f3

重芁な点は、プロセス グルヌプをロヌルするホストずしお任意の nifi むンスタンスを指定できるこずです。

停止したプロセッサを含むプロセス グルヌプが远加されたした。起動する必芁がありたす。

#> nifi pg-start -pgid 7f522a13-016e-1000-e504-d5b15587f2f3 -u http://nifi:8080

芋事、プロセッサが起動したした。 ただし、問題の状況によっおは、NiFi むンスタンスが他のむンスタンスにデヌタを送信する必芁がありたす。 デヌタをサヌバヌに転送するためにプッシュ方匏が遞択されたず仮定したす。 デヌタ転送を敎理するには、远加したリモヌト プロセス グルヌプ (RPG) でデヌタ転送を有効にする (送信を有効にする) 必芁がありたす。これは、フロヌにすでに含たれおいたす。

Apache NiFi でのフロヌ配信の自動化

CLI やその他の゜ヌスのドキュメントでは、デヌタ転送を有効にする方法が芋぀かりたせんでした。 これを行う方法を知っおいる堎合は、コメントに曞き蟌んでください。

バッシュもあるし、最埌たで行く準備はできおいるので、掻路を芋出したす NiFi API を䜿甚するず、この問題を解決できたす。 次のメ゜ッドを䜿甚しお、䞊蚘の䟋から ID を取埗したす (この堎合は 7f522a13-016e-1000-e504-d5b15587f2f3)。 NiFi API メ゜ッドの説明 ここで.

Apache NiFi でのフロヌ配信の自動化
本文では、次の圢匏の JSON を枡す必芁がありたす。

{
    "revision": {
	    "clientId": "value",
	    "version": 0,
	    "lastModifier": "value"
	},
    "state": "value",
    "disconnectedNodeAcknowledged": true
}

「機胜する」ために入力する必芁があるパラメヌタ:
状態 — デヌタ転送ステヌタス。 デヌタ転送を有効にする堎合は TRANSMITTING を䜿甚でき、無効にする堎合は STOPPED を䜿甚できたす。
バヌゞョン - プロセッサのバヌゞョン

バヌゞョンは䜜成時にデフォルトで 0 に蚭定されたすが、これらのパラメヌタは次のメ゜ッドを䜿甚しお取埗できたす。

Apache NiFi でのフロヌ配信の自動化

bash スクリプトのファンにずっおは、この方法が適しおいるように思えるかもしれたせんが、私にずっおは難しいです。bash スクリプトは私の奜みではありたせん。 私の意芋では、次の方法の方が面癜くお䟿利です。

NiPyAPI

NiPyAPI は、NiFi むンスタンスず察話するための Python ラむブラリです。 ドキュメントペヌゞ ラむブラリを操䜜するために必芁な情報が含たれおいたす。 クむックスタヌトに぀いおは、 プロゞェクト github で。

構成をロヌルアりトするためのスクリプトは Python プログラムです。 コヌディングに進みたしょう。
さらなる䜜業のために構成をセットアップしたす。 次のパラメヌタが必芁になりたす。

nipyapi.config.nifi_config.host = 'http://nifi:8080/nifi-api' #путь ЎП nifi-api ОМстаМса, Ма кПтПрПЌ развПрачОваеЌ process group
nipyapi.config.registry_config.host = 'http://nifi-registry:18080/nifi-registry-api' #путь ЎП nifi-registry-api registry
nipyapi.config.registry_name = 'MyBeutifulRegistry' #МазваМОе registry, как буЎет Мазываться в ОМстаМсе nifi
nipyapi.config.bucket_name = 'BucketName' #МазваМОе bucket, Оз кПтПрПгП пПЎтягОваеЌ flow
nipyapi.config.flow_name = 'FlowName' #МазваМОе flow, кПтПрПе пПЎтягОваеЌ

さらに、このラむブラリのメ゜ッドの名前を挿入したす。 ここで.

次を䜿甚しおレゞストリを nifi むンスタンスに接続したす。

nipyapi.versioning.create_registry_client

このステップでは、レゞストリが既にむンスタンスに远加されおいるこずを確認するチェックを远加するこずもできたす。これには、次のメ゜ッドを䜿甚できたす。

nipyapi.versioning.list_registry_clients

かごの䞭の流れをさらに探玢するためのバケットを芋぀けたす

nipyapi.versioning.get_registry_bucket

芋぀かったバケットに埓っおフロヌを探したす

nipyapi.versioning.get_flow_in_bucket

次に、このプロセス グルヌプが既に远加されおいるかどうかを理解するこずが重芁です。 プロセス グルヌプは座暙によっお配眮されるため、プロセス グルヌプの䞊に XNUMX 番目のプロセスが重なる堎合に状況が発生する可胜性がありたす。 確認したずころ、それは可胜です 🙂 远加されたすべおのプロセスグルヌプを取埗するには、メ゜ッドを䜿甚したす

nipyapi.canvas.list_all_process_groups

次に、たずえば名前で怜玢できたす。

テンプレヌトを曎新するプロセスに぀いおは説明したせん。新しいバヌゞョンのテンプレヌトにプロセッサが远加された堎合、キュヌ内のメッセヌゞの存圚に問題がないこずだけを述べたす。 ただし、プロセッサを削陀するず、問題が発生する可胜性がありたす (プロセッサの前にメッセヌゞ キュヌが蓄積されおいる堎合、nifi ではプロセッサの削陀が蚱可されたせん)。 この問題を私がどのように解決したかに興味がある堎合は、この点に぀いお話し合いたすので、私たでメヌルをください。 連絡先は蚘事の最埌にありたす。 プロセス グルヌプを远加する手順に進みたす。

スクリプトをデバッグしおいるずきに、フロヌの最新バヌゞョンが垞に取埗されるわけではないずいう特城に遭遇したため、最初にこのバヌゞョンを明確にするこずをお勧めしたす。

nipyapi.versioning.get_latest_flow_ver

デプロむプロセスグルヌプ:

nipyapi.versioning.deploy_flow_version

プロセッサを起動したす。

nipyapi.canvas.schedule_process_group

CLI に関するブロックで、リモヌト プロセス グルヌプではデヌタ転送が自動的に有効にならないず曞かれおいたした。 スクリプトを実装するずきに、私もこの問題に遭遇したした。 圓時、API を䜿甚しおデヌタ転送を開始できなかったため、NiPyAPI ラむブラリの開発者に手玙を曞いおアドバむス/助けを求めるこずにしたした。 開発者が私に返答し、私たちは問題に぀いお話し合ったずころ、「䜕かを確認する」時間が必芁だず曞いおきたした。 そしお数日埌、私の起動時の問題を解決する Python 関数が曞かれた電子メヌルが届きたした。 圓時の NiPyAPI のバヌゞョンは 0.13.3 で、圓然ながらそのようなものは䜕もありたせんでした。 しかし、ごく最近リリヌスされたバヌゞョン 0.14.0 では、この機胜はすでにラむブラリに含たれおいたす。 䌚う

nipyapi.canvas.set_remote_process_group_transmission

そこで、NiPyAPI ラむブラリの助けを借りお、レゞストリに接続し、フロヌをロヌルアップし、プロセッサずデヌタ転送も開始したした。 次に、コヌドを粟査し、あらゆる皮類のチェックを远加し、ログを蚘録するだけです。 しかし、それは党く別の話です。

私が怜蚎した自動化オプションの䞭で、埌者が最も効率的であるように思えたした。 たず、これは䟝然ずしお Python コヌドであり、補助プログラム コヌドを埋め蟌んでプログラミング蚀語の利点をすべお享受できたす。 次に、NiPyAPI プロゞェクトは積極的に開発されおおり、問題が発生した堎合は開発者に問い合わせるこずができたす。 第䞉に、NiPyAPI は、耇雑な問題を解決する際に NiFi ず察話するためのより柔軟なツヌルです。 たずえば、フロヌ内のメッセヌゞ キュヌが珟圚空かどうか、およびプロセス グルヌプを曎新できるかどうかを刀断したす。

それだけです。 NiFi でのフロヌ配信を自動化するための 3 ぀のアプロヌチず、開発者が遭遇する可胜性のある萜ずし穎に぀いお説明し、配信を自動化するための実甚的なコヌドを提䟛したした。 もしあなたが私ず同じようにこのトピックに興味があるなら - ぎょんぎょん

出所 habr.com

コメントを远加したす