web-dev-qa-db-ja.com

APACHE NIFI vs Apache AIRFLOW vs Apache FALCON?以下のシナリオでどちらが最適ですか?

Javaでデバイスのセットと通信するソリューションを開発していますREST異なるベンダーに属しているAPI。各ベンダーには、ソリューション内で実行する必要があるプロセスのリストですが、これらのプロセスはベンダーごとに異なります。実行する必要のある高レベルのプロセスは次のとおりです。

  • _Retrieve an XML file from a folder_
  • _Process the XML file_
  • _Perform some image processing_
  • _Schedule a job and execute it on the scheduled time_
  • _Storing data on a MySQL DB and perform some REST calls to outside APIs_

したがって、1つのベンダーが上記のすべてのプロセスを持っている場合があります。しかし、別の場合、いくつかのプロセスがない場合があります(例:画像処理)。以下のものは、選択したソリューションから取得できるはずです。

  • _I should be able to create custom workflows for new vendors_
  • _Need to identify any failures that have been occurred within the workflow and perform retry mechanisms._
  • Should be able to execute some functions parallelly (Eg: Image processing)
  • Scalable
  • Opensource

そのため、Nifi/Airflow/Falconなどのワークフローマネージャーを調べるように言われました。私はそれらについていくつか調査しましたが、最も適切な解決策を完成させることができませんでした。

注:Hadoopまたは他のクラスターを使用する必要はなく、データフローの頻度はそれほど高くありません

現在、Nifiの使用を考えています。しかし、誰かがそれについてあなたの意見を述べることができますか?私のユースケースに最適なソリューションは何ですか?

7
SelakaN

Apache NiFiは、Apache AirflowまたはApache Oozieのようなワークフローマネージャーではありません。これはデータフローツールです。データをルーティングして変換します。これは、ジョブをスケジュールすることを意図したものではなく、複数の場所からデータを収集し、そのデータを処理する個別のステップを定義して、そのデータを別の宛先にルーティングすることを可能にします。

Apache Falconは、HDFSデータセットをより簡単に定義および管理できるという点でも異なります。これは、事実上、HDFSクラスター内のデータ管理です。

あなたの説明に基づいて、NiFiはあなたの要件に役立つでしょう。 XMLファイルを収集し、何らかの方法で処理し、データをMySQLに保存し、REST呼び出しを実行できます。また、新しいベンダー向けに簡単に構成でき、障害に十分耐えることができます。ほとんどの機能を並行して実行し、複数のホストマシンを持つクラスター化されたNiFiにスケールできます。パフォーマンスと信頼性を考慮して設計されています。

私がよくわからないのは、画像処理を実行する能力です。一部のプロセッサ(画像メタデータの抽出、画像のサイズ変更)がありますが、それ以外の場合は、Javaで新しいプロセッサを開発する必要があります-これは比較的簡単です。または、画像処理でPythonまたはその他のスクリプト言語を使用している場合は、いずれかのExecuteScriptプロセッサを使用できます。

NiFiを使用した「ジョブのスケジュール」は推奨されません。

完全な開示:私はApache NiFiの寄稿者です。

6

OPの同様のユースケースでnifiを使用しています。スケジューリングに関して、私はnifiがKafkaでどのように機能するかを気に入っています。crontabの頻度で実行するようにいくつかのスクリプトをスケジュールし、メッセージをKafkaトピックに追加します。このトピックはnifiによってリッスンされ、次にロード、変換、フェッチ、インデックス作成、保存などのためのオーケストレーション。また、いつでもHttpRequestを処理できるため、外部からプロセスをトリガーするために「Webhookレシーバー」を作成できますHTTP POSTもう一度、単純なデプロイメント(プラグインして単一のマシンでプレイするデプロイメント)の場合、cronjobはタスクを釘付けにします。画像処理については、pythonがExecuteScriptプロセッサに接続されているOCR画像リーダーと、opencvExecuteCommandプロセッサに接続されている1つの顔の向きを使用しています、自動nifiのバックプレッシャーは、pythonスクリプトとコマンドを単独で実行するだけで実行した問題の多くを解決しました。

2
panchicore