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 :

  1. Incrémentez la version du processeur dans le champ ProcessorDetails.version.

  2. Recréez et importez à nouveau le binaire NiFi Archive (NAR). Cela déclenche la réinitialisation du cache de l’environnement virtuel Python.

  3. Supprimez et ajoutez à nouveau le processeur sur le canevas. Ceci déclenche la réinitialisation de la passerelle Py4J.