Comment fonctionne Apache Nifi - surfez sur votre flux de données, ne vous y noyez pas

introduction

C'est un flux d'eau fou. Tout comme votre application traite un flux de données fou. Routage des données d'un stockage à un autre, application de règles de validation et réponse aux questions de gouvernance des données, la fiabilité dans un écosystème Big Data est difficile à obtenir si vous le faites tout seul.

Bonne nouvelle, vous n'avez pas à créer votre solution de flux de données à partir de zéro - Apache NiFi est là pour vous!

À la fin de cet article, vous serez un expert NiFi - prêt à construire votre pipeline de données.

Ce que je vais couvrir dans cet article:

  • Qu'est-ce qu'Apache NiFi, dans quelle situation vous devez l'utiliser et quels sont les concepts clés à comprendre dans NiFi.

Ce que je ne couvrirai pas:

  • Installation, déploiement, surveillance, sécurité et administration d'un cluster NiFi.

Pour votre commodité, voici la table des matières, n'hésitez pas à aller directement là où votre curiosité vous mène. Si vous êtes un novice NiFi, il est conseillé de parcourir cet article dans l'ordre indiqué.

Table des matières

  • I - Qu'est-ce qu'Apache NiFi?

    - Définition du NiFi

    - Pourquoi utiliser NiFi?

  • II - Apache Nifi au microscope

    - FlowFile

    - Processeur

    - Groupe de processus

    - Connexion

    - Contrôleur de débit

  • Conclusion et appel à l'action

Qu'est-ce qu'Apache NiFi?

Sur le site Web du projet Apache Nifi, vous pouvez trouver la définition suivante:

Un système facile à utiliser, puissant et fiable pour traiter et distribuer les données.

Analysons les mots-clés là-bas.

Définition du NiFi

Traiter et diffuser les données

C'est l'essentiel de Nifi. Il déplace les données dans les systèmes et vous donne des outils pour traiter ces données.

Nifi peut gérer une grande variété de sources de données et de formats. Vous récupérez les données d'une source, vous les transformez et les transférez vers un autre récepteur de données.

Facile à utiliser

Processeurs - les boîtiers - reliés par des connecteurs - les flèches créent un flux . N iFi offre une expérience de programmation basée sur les flux.

Nifi permet de comprendre, en un coup d'œil, un ensemble d'opérations de flux de données qui prendraient des centaines de lignes de code source à mettre en œuvre.

Considérez le pipeline ci-dessous:

Pour traduire le flux de données ci-dessus en NiFi, accédez à l'interface utilisateur graphique NiFi, faites glisser et déposez trois composants dans le canevas, et

C'est ça. La construction prend deux minutes.

Maintenant, si vous écrivez du code pour faire la même chose, il faudra probablement plusieurs centaines de lignes pour obtenir un résultat similaire.

Vous ne capturez pas l'essence du pipeline à travers le code comme vous le faites avec une approche basée sur les flux. Nifi est plus expressif pour construire un pipeline de données; il est conçu pour cela .

Puissant

NiFi fournit de nombreux processeursprêt à l'emploi (293 dans Nifi 1.9.2). Vous êtes sur les épaules d'un géant. Ces processeurs standard gèrent la grande majorité des cas d'utilisation que vous pouvez rencontrer.

NiFi est hautement simultané, mais ses composants internes résument la complexité associée. Les processeurs vous offrent une abstraction de haut niveau qui cache la complexité inhérente à la programmation parallèle. Les processeurs fonctionnent simultanément et vous pouvez couvrir plusieurs threads d'un processeur pour faire face à la charge.

La concurrence est une boîte de Pandore informatique que vous ne voulez pas ouvrir. NiFi protège commodément le constructeur de pipeline des complexités de la concurrence.

Fiable

La théorie soutenant NiFi n'est pas nouvelle; il a de solides ancrages théoriques. C'est similaire à des modèles comme SEDA.

Pour un système de flux de données, l'un des principaux sujets à traiter est la fiabilité. Vous voulez être sûr que les données envoyées quelque part sont effectivement reçues.

NiFi atteint un haut niveau de fiabilité grâce à de multiples mécanismes qui gardent une trace de l'état du système à tout moment. Ces mécanismes sont configurables afin que vous puissiez faire les compromis appropriés entre la latence et le débit requis par vos applications.

NiFi suit l'historique de chaque élément de données avec ses caractéristiques de lignée et de provenance. Il permet de savoir quelle transformation se produit sur chaque information.

La solution de lignage de données proposée par Apache Nifi s'avère être un excellent outil pour auditer un pipeline de données. Les fonctionnalités de lignage des données sont essentielles pour renforcer la confiance dans les mégadonnées et les systèmes d'IA dans un contexte où des acteurs transnationaux tels que l'Union européenne proposent des lignes directrices pour soutenir un traitement précis des données.

Pourquoi utiliser Nifi?

Tout d'abord, je tiens à préciser que je ne suis pas ici pour évangéliser NiFi. Mon objectif est de vous donner suffisamment d'éléments pour que vous puissiez prendre une décision éclairée sur la meilleure façon de construire votre pipeline de données.

Il est utile de garder à l'esprit les quatre V du Big Data lors du dimensionnement de votre solution.

  • Volume - À quelle échelle travaillez-vous? Par ordre de grandeur, êtes-vous plus proche de quelques GigaBytes ou de centaines de PetaBytes?
  • Variété - Combien de sources de données disposez-vous? Vos données sont-elles structurées? Si oui, le schéma varie-t-il souvent?
  • Vitesse - Quelle est la fréquence des événements que vous traitez? S'agit-il de paiements par carte de crédit? S'agit-il d'un rapport de performances quotidien envoyé par un appareil IoT?
  • Véracité - Pouvez-vous faire confiance aux données? Sinon, devez-vous appliquer plusieurs opérations de nettoyage avant de le manipuler?

NiFi ingère de manière transparente les données de plusieurs sources de données et fournit des mécanismes pour gérer différents schémas dans les données. Ainsi, il brille lorsqu'il y a une grande variété dans les données.

Nifi est particulièrement précieux si les données sont de faible véracité . Puisqu'il fournit plusieurs processeurs pour nettoyer et formater les données.

Avec ses options de configuration, Nifi peut répondre à un large éventail de situations de volume / vitesse.

Une liste croissante d'applications pour les solutions de routage de données

Les nouvelles réglementations, l'essor de l'Internet des objets et le flux de données qu'il génère soulignent la pertinence d'outils tels qu'Apache NiFi.

  • Les microservices sont à la mode. Dans ces services faiblement couplés, les données constituent le contrat entre les services. Nifi est un moyen robuste d'acheminer des données entre ces services.
  • Internet des objetsapporte une multitude de données dans le cloud. L'ingestion et la validation de données de la périphérie vers le cloud posent de nombreux nouveaux défis que NiFi peut relever efficacement (principalement via MiniFi, projet NiFi pour les périphériques de périphérie)
  • De nouvelles directives et réglementations sont mises en place pour réajuster l'économie du Big Data. Dans ce contexte de surveillance croissante, il est vital pour les entreprises d'avoir une vue d'ensemble claire de leur pipeline de données. Le lignage de données NiFi, par exemple, peut être utile pour se mettre en conformité avec les réglementations.

Comblez le fossé entre les experts du Big Data et les autres

Comme vous pouvez le voir par l'interface utilisateur, un flux de données exprimé en NiFi est excellent pour communiquer sur votre pipeline de données. Cela peut aider les membres de votre organisation à mieux connaître ce qui se passe dans le pipeline de données.

  • Un analyste demande des informations sur les raisons pour lesquelles ces données arrivent ici de cette façon? Asseyez-vous ensemble et marchez dans le courant. En cinq minutes, vous donnez à quelqu'un une solide compréhension du pipeline Extract Transform and Load -ETL- .
  • Vous voulez des commentaires de vos pairs sur un nouveau flux de gestion des erreurs que vous avez créé? NiFi en fait une décision de conception de considérer les chemins d'erreur comme des résultats valides. Attendez-vous à ce que la revue de flux soit plus courte qu'une revue de code traditionnelle.

Devriez-vous l'utiliser? Oui Non peut-être?

NiFi se présente comme facile à utiliser. Pourtant, il s'agit d'une plate-forme de flux de données d'entreprise. Il offre un ensemble complet de fonctionnalités dont vous n'aurez peut-être besoin que d'un sous-ensemble réduit. L'ajout d'un nouvel outil à la pile n'est pas anodin.

Si vous partez de zéro et gérez quelques données à partir de sources de données fiables, vous feriez peut-être mieux de configurer votre pipeline Extract Transform and Load - ETL . Peut-être qu'une capture de données de modification à partir d'une base de données et certains scripts de préparation de données sont tout ce dont vous avez besoin.

D'autre part, si vous travaillez dans un environnement avec des solutions Big Data existantes en cours d'utilisation (que ce soit pour le stockage, le traitement ou la messagerie), NiFi s'intègre bien avec elles et est plus susceptible d'être une victoire rapide. Vous pouvez tirer parti des connecteurs prêts à l'emploi pour ces autres solutions Big Data.

Il est facile d'être emballé par de nouvelles solutions. Dressez la liste de vos besoins et choisissez la solution qui répond le plus simplement possible à vos besoins .

Maintenant que nous avons vu l'image très élevée d'Apache NiFi, nous examinons ses concepts clés et disséquons ses composants internes.

Apache Nifi au microscope

«NiFi est des boîtes et la programmation de flèches» peut être correct pour communiquer une vue d'ensemble. Cependant, si vous devez utiliser NiFi, vous voudrez peut-être en savoir un peu plus sur son fonctionnement.

Dans cette seconde partie, j'explique les concepts critiques d'Apache NiFi avec des schémas. Ce modèle de boîte noire ne sera plus une boîte noire pour vous par la suite.

Déballage d'Apache NiFi

Lorsque vous démarrez NiFi, vous atterrissez sur son interface Web. L'interface utilisateur Web est le modèle sur lequel vous concevez et contrôlez votre pipeline de données.

Dans Nifi, vous assemblez des processeurs reliés entre eux par des connexions . Dans l'exemple de flux de données présenté précédemment, il existe trois processeurs.

L'interface utilisateur du canevas NiFi est le cadre dans lequel évolue le constructeur de pipeline.

Donner un sens à la terminologie Nifi

Pour exprimer votre flux de données dans Nifi, vous devez d'abord maîtriser son langage. Pas de soucis, quelques termes suffisent pour en saisir le concept.

Les boîtes noires sont appelées processeurs, et elles échangent des fragments d'informations appelés FlowFiles via des files d'attente nommées connexions . Enfin, le contrôleur FlowFile est responsable de la gestion des ressources entre ces composants.

Voyons comment cela fonctionne sous le capot.

FlowFile

En NiFi, le FlowFileest le paquet d'informations circulant dans les processeurs du pipeline.

Un FlowFile se compose de deux parties:

  • Attributs , qui sont des paires clé / valeur. Par exemple, le nom du fichier, le chemin du fichier et un identificateur unique sont des attributs standard.
  • Content , une référence au flux d'octets compose le contenu FlowFile.

Le FlowFile ne contient pas les données proprement dites. Cela limiterait considérablement le débit du pipeline.

Au lieu de cela, un FlowFile contient un pointeur qui référence les données stockées à un endroit dans le stockage local. Cet endroit s'appelle le référentiel de contenu .

Pour accéder au contenu, le FlowFile revendique la ressource à partir du référentiel de contenu. Ces derniers conservent des traces du décalage exact du disque par rapport à l'emplacement du contenu et le retransmettent au FlowFile.

Tous les processeurs n'ont pas besoin d'accéder au contenu du FlowFile pour effectuer leurs opérations - par exemple, l'agrégation du contenu de deux FlowFiles ne nécessite pas de charger leur contenu en mémoire.

Lorsqu'un processeur modifie le contenu d'un FlowFile, les données précédentes sont conservées. NiFi copie sur écriture, il modifie le contenu tout en le copiant vers un nouvel emplacement. Les informations d'origine sont laissées intactes dans le référentiel de contenu.

Exemple

Considérez un processeur qui compresse le contenu d'un FlowFile. Le contenu d'origine reste dans le référentiel de contenu et une nouvelle entrée est créée pour le contenu compressé.

Le référentiel de contenu renvoie enfin la référence au contenu compressé. Le FlowFile est mis à jour pour pointer vers les données compressées.

Le dessin ci-dessous résume l'exemple avec un processeur qui compresse le contenu de FlowFiles.

Fiabilité

NiFi prétend être fiable, comment est-ce en pratique?Les attributs de tous les FlowFiles actuellement utilisés, ainsi que la référence à leur contenu, sont stockés dans le référentiel FlowFile.

À chaque étape du pipeline, une modification apportée à un Flowfile est d'abord enregistrée dans le référentiel FlowFile, dans un journal à écriture anticipée, avant d'être effectuée.

Pour chaque FlowFile existant actuellement dans le système, le référentiel FlowFile stocke:

  • Les attributs FlowFile
  • Un pointeur vers le contenu du FlowFile situé dans le référentiel FlowFile
  • L'état du FlowFile. Par exemple: à quelle file d'attente appartient le Flowfile à cet instant.

Le référentiel FlowFile nous donne l'état le plus actuel du flux; c'est donc un outil puissant pour se remettre d'une panne.

NiFi fournit un autre outil pour suivre l'historique complet de tous les FlowFiles du flux: le référentiel de provenance.

Référentiel de provenance

Chaque fois qu'un FlowFile est modifié, NiFi prend un instantané du FlowFile et de son contexte à ce stade. Le nom de cet instantané dans NiFi est un événement de provenance . Le référentiel de provenance enregistre les événements de provenance.

La provenance nous permet de retracer la lignée des données et de construire la chaîne de traçabilité complète pour chaque information traitée dans NiFi.

En plus d'offrir la lignée complète des données, le référentiel de provenance propose également de rejouer les données à tout moment.

Attendez, quelle est la différence entre le référentiel FlowFile et le référentiel Provenance?

L'idée derrière le référentiel FlowFile et le référentiel Provenance est assez similaire, mais ils ne résolvent pas le même problème.

  • Le référentiel FlowFile est un journal qui contient uniquement le dernier état des FlowFiles en cours d'utilisation dans le système. C'est l'image la plus récente du flux et permet de se remettre rapidement d'une panne.
  • Le référentiel de provenance, en revanche, est plus exhaustif car il suit le cycle de vie complet de chaque FlowFile qui a été dans le flux.

Si vous ne disposez que de l'image la plus récente du système avec le référentiel FlowFile, le référentiel Provenance vous offre une collection de photos - une vidéo . Vous pouvez revenir à n'importe quel moment du passé, rechercher les données, rejouer les opérations à partir d'un moment donné. Il fournit une lignée complète des données.

Processeur FlowFile

Un processeur est une boîte noire qui effectue une opération. Les processeurs ont accès aux attributs et au contenu du FlowFile pour effectuer toutes sortes d'actions. Ils vous permettent d'effectuer de nombreuses opérations dans l'entrée de données, les tâches de transformation / validation de données standard et d'enregistrer ces données dans divers récepteurs de données.

NiFi est livré avec de nombreux processeurs lorsque vous l'installez. Si vous ne trouvez pas celui qui convient le mieux à votre cas d'utilisation, il est toujours possible de créer votre propre processeur. L'écriture de processeurs personnalisés n'entre pas dans le cadre de cet article de blog.

Les processeurs sont des abstractions de haut niveau qui remplissent une tâche. Cette abstraction est très pratique car elle protège le constructeur de pipeline des difficultés inhérentes à la programmation simultanée et à la mise en œuvre de mécanismes de gestion des erreurs.

Les processeurs exposent une interface avec plusieurs paramètres de configuration pour affiner leur comportement.

Les propriétés de ces processeurs sont le dernier lien entre NiFi et la réalité métier des exigences de votre application.

Le diable est dans les détails et les créateurs de pipelines passent la plupart de leur temps à affiner ces propriétés pour qu'elles correspondent au comportement attendu.

Mise à l'échelle

Pour chaque processeur, vous pouvez spécifier le nombre de tâches simultanées que vous souhaitez exécuter simultanément. Comme ça, le contrôleur de flux alloue plus de ressources à ce processeur, augmentant son débit. Les processeurs partagent des threads. Si un processeur demande plus de threads, les autres processeurs ont moins de threads disponibles à exécuter. Les détails sur la façon dont le contrôleur de flux alloue les threads sont disponibles ici.

Mise à l'échelle horizontale. Une autre façon d'évoluer consiste à augmenter le nombre de nœuds dans votre cluster NiFi. Les serveurs de clustering permettent d'augmenter votre capacité de traitement en utilisant du matériel de base.

Groupe de processus

Celui-ci est simple maintenant que nous avons vu ce que sont les processeurs.

Un groupe de processeurs réunis avec leurs connexions peut former un groupe de processus. Vous ajoutez un port d'entrée et un port de sortie afin qu'il puisse recevoir et envoyer des données.

Les groupes de processeurs sont un moyen simple de créer de nouveaux processeurs à partir de processeurs existants.

Connexions

Les connexions sont les files d'attente entre les processeurs. Ces files d'attente permettent aux processeurs d'interagir à des taux différents. Les connexions peuvent avoir différentes capacités comme il existe différentes tailles de conduites d'eau.

Étant donné que les processeurs consomment et produisent des données à des taux différents en fonction des opérations qu'ils effectuent, les connexions agissent comme des tampons de FlowFiles.

Le nombre de données pouvant être dans la connexion est limité. De même, lorsque votre conduite d'eau est pleine, vous ne pouvez plus ajouter d'eau, ou elle déborde.

Dans NiFi, vous pouvez définir des limites sur le nombre de FlowFiles et la taille de leur contenu agrégé passant par les connexions.

Que se passe-t-il lorsque vous envoyez plus de données que la connexion ne peut en gérer?

Si le nombre de FlowFiles ou la quantité de données dépasse le seuil défini, une contre - pression est appliquée. Le contrôleur de flux ne planifiera pas l'exécution du processeur précédent tant qu'il n'y aura pas de place dans la file d'attente.

Disons que vous avez une limite de 10 000 FlowFiles entre deux processeurs. À un moment donné, la connexion contient 7 000 éléments. C'est correct puisque la limite est de 10 000. P1 peut toujours envoyer des données via la connexion à P2 .

Disons maintenant que le processeur 1 envoie 4 000 nouveaux FlowFiles à la connexion.

7 0000 + 4 000 = 11 000 → On passe au-dessus du seuil de connexion de 10 000 FlowFiles.

Les limites sont des limites souples, ce qui signifie qu'elles peuvent être dépassées. Cependant, une fois qu'ils le sont, le processeur précédent, P1 ne sera pas programmé tant que le connecteur ne redescendra en dessous de sa valeur seuil - 10 000 FlowFiles.

Cet exemple simplifié donne une vue d'ensemble du fonctionnement de la contre-pression.

Vous souhaitez configurer des seuils de connexion adaptés au volume et à la vitesse des données à traiter. Gardez à l' esprit les quatre Vs .

L'idée de dépasser une limite peut sembler étrange. Lorsque le nombre de FlowFiles ou des données associées dépasse le seuil, un mécanisme de swap se déclenche.

Pour un autre exemple de contre-pression, ce fil de discussion peut vous aider.

Hiérarchisation des FlowFiles

Les connecteurs en NiFi sont hautement configurables. Vous pouvez choisir la façon dont vous priorisez les FlowFiles dans la file d'attente pour décider lequel traiter ensuite.

Parmi les possibilités disponibles, il y a, par exemple, l'ordre First In First Out - FIFO. Cependant, vous pouvez même utiliser un attribut de votre choix dans le FlowFile pour hiérarchiser les paquets entrants.

Contrôleur de débit

Le contrôleur de débit est la colle qui rassemble tout. Il alloue et gère les threads pour les processeurs. C'est ce qui exécute le flux de données.

En outre, le contrôleur de flux permet d'ajouter des services de contrôleur.

Ces services facilitent la gestion des ressources partagées telles que les connexions de base de données ou les informations d'identification des fournisseurs de services cloud. Les services de contrôleur sont des démons. Ils s'exécutent en arrière-plan et fournissent la configuration, les ressources et les paramètres à exécuter par les processeurs.

Par exemple, vous pouvez utiliser un service de fournisseur d'informations d'identification AWS pour permettre à vos services d'interagir avec les compartiments S3 sans avoir à vous soucier des informations d'identification au niveau du processeur.

Tout comme avec les processeurs, une multitude de services de contrôleur est disponible immédiatement.

Vous pouvez consulter cet article pour plus de contenu sur les services du contrôleur.

Conclusion et appel à l'action

Au cours de cet article, nous avons discuté de NiFi, une solution de flux de données d'entreprise. Vous avez maintenant une solide compréhension de ce que fait NiFi et de la manière dont vous pouvez tirer parti de ses fonctionnalités de routage de données pour vos applications.

Si vous lisez ceci, félicitations! Vous en savez désormais plus sur NiFi que 99,99% de la population mondiale.

C'est en forgeant qu'on devient forgeron. Vous maîtrisez tous les concepts nécessaires pour commencer à construire votre propre pipeline. Faites simple; faites-le fonctionner en premier.

Voici une liste de ressources intéressantes que j'ai compilées en plus de mon expérience de travail pour écrire cet article.

Ressources ?

La vue d'ensemble

Parce que la conception d'un pipeline de données dans un écosystème complexe nécessite des compétences dans plusieurs domaines, je recommande vivement le livre Designing Data-Intensive Applicationsde Martin Kleppmann. Il couvre les fondamentaux.

  • Une feuille de triche avec toutes les références citées dans le livre de Martin est disponible sur son repo Github.

Cette feuille de triche est un excellent point de départ si vous savez déjà quel type de sujet vous souhaitez étudier en profondeur et que vous souhaitez trouver des matériaux de qualité.

Alternatives à Apache Nifi

D'autres solutions de flux de données existent.

Open source:

  • Streamsets est similaire à NiFi; une bonne comparaison est disponible sur ce blog

La plupart des fournisseurs de cloud existants proposent des solutions de flux de données. Ces solutions s'intègrent facilement avec d'autres produits que vous utilisez de ce fournisseur de cloud. En même temps, il vous lie solidement à un fournisseur particulier.

  • Azure Data Factory, une solution Microsoft
  • IBM a son InfoSphere DataStage
  • Amazon propose un outil nommé Data Pipeline
  • Google propose son Dataflow
  • Alibaba Cloud présente un service DataWorks avec des fonctionnalités similaires

Ressources liées au NiFi

  • La documentation officielle de Nifi et en particulier la section Nifi In-depth sont des mines d'or.
  • L'inscription à la liste de diffusion des utilisateurs Nifi est également un excellent moyen d'être informé - par exemple, cette conversation explique la contre-pression.
  • Hortonworks, un grand fournisseur de solutions de données, a un site Web communautaire complète des ressources à mobiliser et à comment faire pour Apache Nifi.

    - Cet article décrit en détail les connecteurs, l'utilisation du tas et la contre-pression.

    - Celui-ci partage les bonnes pratiques de dimensionnement lors du déploiement d'un cluster NiFi.

  • Le blog NiFi distille de nombreuses informations sur les modèles d'utilisation NiFi ainsi que des conseils sur la construction de pipelines.
  • Explication du modèle de vérification des réclamations
  • La théorie derrière Apache Nifi n'est pas nouvelle, Seda référencée dans Nifi Doc est extrêmement pertinente

    - Matt Welsh. Berkeley. SEDA: une architecture pour des services Internet bien conditionnés et évolutifs [en ligne]. Consulté le 21 avril 2019 sur //www.mdw.la/papers/seda-sosp01.pdf