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:

  1. Erhöhen Sie die Prozessorversion im Feld ProcessorDetails.version.

  2. 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.

  3. Entfernen Sie den Prozessor und fügen Sie ihn dem Arbeitsbereich wieder hinzu. Dies löst die Neuinitialisierung der Py4J-Bridge aus.