Richtlinien für die Verwendung von Python-Erweiterungen in Openflow¶
Dieses Thema beschreibt die Einschränkungen, unterstützten Konfigurationen und Best Practices bei der Verwendung von Python-Erweiterungen in Openflow.
Python-Prozessoren in Openflow verwenden die Py4J-Bridge-Architektur von NiFi, die grundlegende andere Ressourceneigenschaften hat als native Java-Prozessoren. Weil Python-Prozessoren als externe OS-Prozesse außerhalb der JVM ausgeführt werden, verbrauchen sie zusätzlichen Arbeitsspeicher, unterliegen nicht dem internen Ressourcenmanagement von NiFi und sind nur eingeschränkt beobachtbar. Diese Unterschiede wirken sich auf die Dimensionierung der Laufzeit, die Kapazitätsplanung und die Überwachung aus.
Unterschiede der Architektur¶
Python-Prozessoren werden als externe OS-Prozesse und nicht innerhalb derJVM ausgeführt. Diese Architektur wirkt sich darauf aus, wie Ressourcen zugewiesen, überwacht und verwaltet werden:
Typ des Prozessors |
Java-Prozessor |
Python-Prozessor |
|---|---|---|
Laufzeitumgebung |
Interne JVM-Threads |
Externer OS-Prozess |
Verwaltung des Arbeitsspeichers |
Verwaltet innerhalb des JVM-Heaps |
Separater Prozessspeicher |
Lebenszyklus |
NiFi-gesteuerte |
Lebenszyklus des externen Prozesses |
Überwachung |
Vollständige NiFi-Beobachtbarkeit |
Eingeschränkte Sichtbarkeit |
Größenbeschränkungen für die Laufzeit¶
Python-Erweiterungen sind nur für die Laufzeitumgebungen Medium und Large verfügbar. Laufzeitumgebungen des Typs Small unterstützen aufgrund von CPU- und Speicherbeschränkungen keine Python-Prozessoren. Snowflake Openflow blockiert Python-Erweiterungen für Laufzeitumgebungen des Typs Small:
Laufzeitgröße |
Python-Unterstützung |
Anmerkungen |
|---|---|---|
Small |
Nicht unterstützt |
Python-Prozessoren werden bei Laufzeiten des Typs Small aufgrund von CPU- und Speicherbeschränkungen blockiert. |
Medium |
Begrenzt (bis zu 2 Python-Prozessoren) |
Die Beschränkung gilt für die gesamte Laufzeit, nicht pro Konnektor oder Prozessgruppe. Diese Beschränkung ist derzeit eine Empfehlung, die in Zukunft ein erzwungener Maximalwert für Openflow-Laufzeiten sein wird. |
Large |
Begrenzt (bis zu 4 Python-Prozessoren) |
Die Beschränkung gilt für die gesamte Laufzeit, nicht pro Konnektor oder Prozessgruppe. Diese Beschränkung ist derzeit eine Empfehlung, die in Zukunft ein erzwungener Maximalwert für Openflow-Laufzeiten sein wird. |
Best Practices¶
Befolgen Sie diese Richtlinien für die Arbeit mit Python-Prozessoren in Openflow:
Verwenden Sie Java für CPU-intensive Vorgänge. Java ermöglicht eine effizientere Threadverwaltung innerhalb der JVM. Groovy-Skripte sind eine Java-basierte Alternative.
Verwenden Sie Laufzeiten des Typs Medium oder Large. Python ist bei Laufzeiten des Typs Small nicht verfügbar.
Begrenzen Sie die Anzahl der Python-Prozessoren. Bleiben Sie innerhalb der dokumentierten Beschränkungen pro Laufzeitgröße.
Überwachen Sie die Ressourcennutzung. Achten Sie auf Speicherbelastung und CPU-Auslastung.
Erstellen Sie eine Plan für Upgrades. Kundenspezifische Python-Prozessoren erfordern nach einem Laufzeit-Upgrade möglicherweise ein Zurücksetzen der virtuellen Umgebung (venv). Weitere Informationen dazu finden Sie unter Wiederherstellen von Python-Prozessoren nach Laufzeit-Upgrades.
Verwenden Sie Single-Thread-Python-Prozessoren. Openflow unterstützt keine Python-Prozessoren, die Unterprozesse erzeugen oder Multithreading verwenden.
Einschränkungen bei der Verwendung von Python-Prozessoren¶
Die folgenden Beschränkungen gelten bei der Verwendung von Python-Prozessoren in Openflow.
- Laufzeiteinschränkungen
Python-Erweiterungen können nur mit Laufzeiten des Typs Medium oder Large verwendet werden. Python-Erweiterungen können nicht mit Laufzeiten des Typs Small verwendet werden. Diese Funktion ist von der Plattform deaktiviert.
- Overhead des Arbeitsspeichers
Jeder Python-Prozessor erzeugt einen externen OS-Prozess mit eigenem Speicherbedarf. Python-Prozesse können gemeinsam mit der JVM um Ressourcen konkurrieren.
- Keine NiFi-Ressourcenverwaltung
Python-Prozessoren unterliegen nicht der Beobachtung oder Begrenzung durch die interne Ressourcenverwaltung von NiFi. CPU-intensive Python-Vorgänge können rund die 50 % der gesamten CPU-Zeit des Servers in Anspruch nehmen.
- Überwachen von Lücken
Der Plattform fehlt der Einblick in den Zustand und den Ressourcenverbrauch von externen Python-Prozessen.
- Handhabung von Upgrades
Nach Laufzeit-Upgrades können kundenspezifische Python-Prozessoren möglicherweise nicht laden oder zeigen unerwartetes Verhalten, bis die virtuellen Umgebungen neu erstellt wurden.
Wiederherstellen von Python-Prozessoren nach Laufzeit-Upgrades¶
Wenn Python-Prozessoren nach dem Upgrade der Laufzeit ausfallen, gehen Sie wie folgt vor:
Erhöhen Sie die Prozessorversion im Feld
ProcessorDetails.version.Erstellen Sie die NiFi Archive (NAR)-Binärdatei neu und laden Sie sie erneut hoch. Dies löst ein Zurücksetzen des Cache für die virtuelle Python-Umgebung aus.
Entfernen Sie den Prozessor und fügen Sie ihn dem Arbeitsbereich wieder hinzu. Dies löst die Neuinitialisierung der Py4J-Bridge aus.