OpenflowでPython拡張機能を使用するためのガイドライン

このトピックでは、OpenflowでPython拡張機能を使用する際の制限、サポートされる構成、およびベストプラクティスについて説明します。

OpenflowのPythonプロセッサーは、ネイティブJavaプロセッサーとは根本的に異なるリソース特性を持つNiFiのPy4Jブリッジアーキテクチャを使用します。PythonプロセッサーはJVM外の外部OSプロセスとして実行されるため、追加のシステムメモリを消費し、NiFiの内部リソース管理の対象にならず、可観測性が制限されます。これらの違いは、ランタイムのサイズ設定、キャパシティプランニング、およびモニタリングに影響します。

アーキテクチャの違い

Pythonプロセッサーは、JVM内ではなく外部OSプロセスとして実行されます。このアーキテクチャは、リソースの割り当て、監視、および管理の方法に影響します。

プロセッサータイプ

Javaプロセッサー

Pythonプロセッサー

ランタイム環境

JVM内部スレッド

外部OSプロセス

メモリ管理

JVMヒープ内で管理

別のプロセスメモリ

ライフサイクル

NiFiによる制御

外部プロセスのライフサイクル

モニタリング

完全なNiFi可観測性

限られた可視性

ランタイムのサイズ制約

Python拡張機能は、MediumまたはLargeランタイムでのみ使用できます。Smallランタイムは、CPUとメモリの制約のためPythonプロセッサーをサポートしていません。Snowflake Openflowは、SmallランタイムでのPython拡張機能をブロックします。

ランタイムのサイズ

Pythonサポート

メモ

S

サポート対象外

Pythonプロセッサーは、CPUとメモリの制約のためSmallランタイムではブロックされます。

制限付き(Pythonプロセッサーは最大2つまで)

この制限はコネクタやプロセスグループごとではなく、ランタイム全体に対するものです。この制限は現在は推奨事項ですが、将来的にはOpenflowランタイムの強制的な最大値になります。

L

制限付き(Pythonプロセッサーは最大4つまで)

この制限はコネクタやプロセスグループごとではなく、ランタイム全体に対するものです。この制限は現在は推奨事項ですが、将来的にはOpenflowランタイムの強制的な最大値になります。

ベストプラクティス

OpenflowでPythonプロセッサーを使用する場合は、以下のガイドラインに従ってください。

  • CPU負荷の高い操作にはJavaを使用します。Javaは、JVM内でより効率的なスレッド管理を提供します。Groovyスクリプトは、Javaベースの代替手段です。

  • MediumまたはLargeランタイムを使用します。PythonはSmallランタイムでは利用できません。

  • Pythonプロセッサーの数を制限します。ランタイムのサイズごとに記載された制限内に収めてください。

  • リソースの使用状況をモニターします。メモリ負荷とCPU競合に注意してください。

  • アップグレードを計画します。カスタムPythonプロセッサーは、ランタイムのアップグレード後に仮想環境(venv)のリセットが必要になる場合があります。詳しくは、:ref:`ランタイムアップグレード後のPythonプロセッサーの復元<label-openflow_python_ext_restore>`を参照してください。

  • シングルスレッドのPythonプロセッサーを使用します。Openflowは、Pythonプロセッサーによるサブプロセスの生成やマルチスレッドの使用をサポートしていません。

Pythonプロセッサーの使用に関する制限

OpenflowでPythonプロセッサーを使用する場合、以下の制限が適用されます。

ランタイムの制約

Python拡張機能は、MediumまたはLargeランタイムでのみ使用できます。Python拡張機能はSmallランタイムでは使用できません。これはプラットフォームによって無効化されています。

メモリオーバーヘッド

各Pythonプロセッサーは、独自のメモリフットプリントを持つ外部OSプロセスを生成します。Pythonプロセスは全体として、リソースをめぐってJVMと競合する可能性があります。

NiFiによるリソース管理なし

Pythonプロセッサーは、NiFiの内部リソース管理による監視や制限を受けません。CPU負荷の高いPython操作は、サーバー全体のCPU時間の約50%を消費する可能性があります。

モニタリングのギャップ

プラットフォームには、外部Pythonプロセスの健全性やリソース消費に対する可視性がありません。

アップグレードの処理

ランタイムのアップグレード後、仮想環境が再作成されるまで、カスタムPythonプロセッサーはロードに失敗したり、予期しない動作をしたりする可能性があります。

ランタイムアップグレード後のPythonプロセッサーの復元

ランタイムのアップグレード後にPythonプロセッサーが正常に動作しない場合は、次を実行します。

  1. ``ProcessorDetails.version``フィールドのプロセッサーバージョンをインクリメントします。

  2. NiFiArchive(NAR)バイナリを再構築して再アップロードします。これにより、Python仮想環境キャッシュのリセットがトリガーされます。

  3. キャンバス上のプロセッサーを削除して再追加します。これにより、Py4Jブリッジの再初期化がトリガーされます。