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プロセッサーが正常に動作しない場合は、次を実行します。
``ProcessorDetails.version``フィールドのプロセッサーバージョンをインクリメントします。
NiFiArchive(NAR)バイナリを再構築して再アップロードします。これにより、Python仮想環境キャッシュのリセットがトリガーされます。
キャンバス上のプロセッサーを削除して再追加します。これにより、Py4Jブリッジの再初期化がトリガーされます。