Lignes directrices pour l’utilisation des extensions Python dans Openflow¶
Cette rubrique décrit les limitations, les configurations prises en charge et les bonnes pratiques lors de l’utilisation d’extensions Python dans Openflow.
Les processeurs Python dans Openflow utilisent l’architecture de passerelle Py4J de NiFi, qui présente des caractéristiques de ressources fondamentalement différentes de celles des processeurs Java natifs. Comme les processeurs Python s’exécutent en tant que processus OS externes en dehors de la JVM, ils consomment davantage de mémoire système, ne sont pas soumis à la gestion interne des ressources de NiFi et offrent une observabilité limitée. Ces différences concernent le dimensionnement de l’environnement d’exécution, la planification des capacités et la surveillance.
Différences d’architecture¶
Les processeurs Python fonctionnent en tant que processus OS externes plutôt qu’au sein de la JVM. Cette architecture affecte la manière dont les ressources sont allouées, surveillées et gérées :
Type de processeur |
Processeur Java |
Processeur Python |
|---|---|---|
Environnement d’exécution |
Threads internes de la JVM |
Processus OS externe |
Gestion de la mémoire |
Géré dans la mémoire heap de la JVM |
Mémoire de processus distincte |
Cycle de vie |
Contrôlé par NiFi |
Cycle de vie des processus externes |
Surveillance |
Observabilité NiFi intégrale |
Visibilité limitée |
Contraintes de taille de l’environnement d’exécution¶
Les extensions Python ne sont disponibles que pour les environnements d’exécution de taille Medium et Large. Les environnements d’exécution de taille Small ne prennent pas en charge les processeurs Python en raison de contraintes liées au CPU et à la mémoire. Snowflake Openflow bloque les extensions Python sur les environnements d’exécution de taille Small :
Taille d’environnement d’exécution |
Prise en charge Python |
Remarques |
|---|---|---|
Small |
Non pris en charge |
Les processeurs Python sont bloqués sur les environnements d’exécution de taille Small en raison de contraintes liées au CPU et à la mémoire. |
Medium |
Limité (jusqu’à 2 processeurs Python) |
La limite s’applique à l’ensemble de l’environnement d’exécution, et non par connecteur ou par groupe de processus. Cette limite est actuellement une recommandation qui sera une valeur maximale appliquée pour les environnements d’exécution Openflow à l’avenir. |
Large |
Limité (jusqu’à 4 processeurs Python) |
La limite s’applique à l’ensemble de l’environnement d’exécution, et non par connecteur ou par groupe de processus. Cette limite est actuellement une recommandation qui sera une valeur maximale appliquée pour les environnements d’exécution Openflow à l’avenir. |
Meilleures pratiques¶
Suivez ces directives pour travailler avec des processeurs Python dans Openflow :
Utilisez Java pour les opérations gourmandes en ressources CPU. Java offre une gestion des threads plus efficace au sein de la JVM. Le langage de script Groovy constitue une alternative basée sur Java.
Utilisez des environnements d’exécution Medium ou Large. Python n’est pas disponible dans les environnements d’exécution de taille Small.
Limitez le nombre de processeurs Python. Restez dans les limites documentées par taille de d’environnement d’exécution.
Surveillez l’utilisation des ressources. Surveillez la pression sur la mémoire et les conflits d’accès au CPU.
Planifiez des mises à niveau. Les processeurs Python personnalisés peuvent nécessiter un environnement virtuel (venv) réinitialisé après les mises à niveau de l’environnement d’exécution. Pour plus d’informations, voir Restauration des processeurs Python après les mises à niveau de l’environnement d’exécution.
Utilisez des processeurs Python à thread unique. Openflow ne prend pas en charge les processeurs Python générant des sous-processus ou utilisant le multithreading.
Limites de l’utilisation des processeurs Python¶
Les limites suivantes s’appliquent lors de l’utilisation de processeurs Python dans Openflow.
- Contraintes liées à l’exécution
Les extensions Python ne peuvent être utilisées qu’avec des environnements d’exécution Medium ou Large. Les extensions Python ne peuvent pas être utilisées avec des environnements d’exécution de taille Small. Cette fonction est désactivée par la plateforme.
- Surcharge de mémoire
Chaque processeur Python génère un processus OS externe avec sa propre empreinte mémoire. Les processus Python peuvent, collectivement, entrer en concurrence avec la JVM pour l’accès aux ressources.
- Pas de gestion des ressources NiFi
Les processeurs Python ne sont ni surveillés ni limités par la gestion interne des ressources NiFi. Les opérations Python gourmandes en ressources CPUpeuvent mobiliser environ 50 % du temps total du serveur CPU.
- Surveillance des écarts
La plateforme manque de visibilité sur la santé des processus externes Python et la consommation de ressources.
- Mettre à niveau le traitement
Après les mises à niveau de l’environnement d’exécution, les processeurs Python personnalisés peuvent ne pas se charger ou présenter un comportement inattendu jusqu’à ce que les environnements virtuels soient recréés.
Restauration des processeurs Python après les mises à niveau de l’environnement d’exécution¶
Si les processeurs Python échouent après la mise à niveau de l’environnement d’exécution, procédez comme suit :
Incrémentez la version du processeur dans le champ
ProcessorDetails.version.Recréez et importez à nouveau le binaire NiFi Archive (NAR). Cela déclenche la réinitialisation du cache de l’environnement virtuel Python.
Supprimez et ajoutez à nouveau le processeur sur le canevas. Ceci déclenche la réinitialisation de la passerelle Py4J.