[Internet of Things] NiFi : concepts généraux

Ce billet aborde l’Internet of Things (IoT) et plus spécifiquement l’Internet of Anything (IoAT, ou parfois IoE, pour Internet of Everything) à travers la présentation des concepts autour d’Apache NiFi,

Qu’est-ce que l’Internet of Anything (IoAT) ?

L’Internet of Anything (IoAT, ou aussi IoE pour Internet of Everything) est un concept dérivé de l’Internet of Things (IoT) qui fait référence à un ensemble d’objets (équipements, logiciels,…) connectés à Internet et, envoyant et/ou recevant des données.

Là où l’IoT se limite sémantiquement aux objets connectés, l’IoAT incorpore un maximum d’éléments connectés supplémentaires comme les gens, les traitements et les données elles-mêmes.


De nos jours, l’IoAT fait face à différentes problématiques métiers :

  • Les flux de données IoAT diffèrent beaucoup des flux de données ETL ou orientés streaming dans le sens où les premiers sont multidirectionnels et plus difficiles à maîtriser là où les seconds sont généralement unidirectionnels et plus faciles à maîtriser.
  • Les flux de données IoAT ne sont généralement pas optimisés et surtout consomment beaucoup de bande-passante.
  • Les flux de données IoAT sont difficiles à collecter, qualifier et sécuriser.
  • Les données IoAT en mouvement (data in motion) sont souvent difficiles à analyser en combinaison avec celles entreposées (data at rest).

C’est dans ce contexte qu’une technologie comme Apache NiFi a été inventée. Technologie ensuite adoptée, par exemple, par Hortonworks suite au rachat d’Onyara en août 2015, donnant ainsi naissance à la plateforme Hortonworks DataFlow (HDF).

Plus de détails ici (en anglais) : http://hortonworks.com/blog/hortonworks-acquires-onyara/.

Introduction à Apache NiFi

    Présentation d’Apache NiFi

Apache NiFi (ex-NiagaraFiles) est une technologie créée par la NSA, sous l’impulsion de Joe Witt, en 2006, avant d’être offert à Apache Software Foundation en 2014, puis officiellement publié en juillet 2015. Il s’agit d’un système de gestion de flux de données simple d’utilisation destiné à répondre aux différentes problématiques IoAT en permettant de :

  • Collecter et contrôler (la provenance) des données issues de diverses sources hétérogènes formant un lac de données (Data Lake) : capteurs, GPS, réseaux sociaux, logs,…
  • Faciliter et sécuriser l’accès à la fois à des données en mouvement et à des données stockées dans des bases de données ou des datawarehouses.
  • Traiter (i.e., parser, filtrer, transformer,…) et diffuser les données collectées et sécurisées pour l’analyse.

Architecture d’Apache NiFi

Dans l’univers Apache NiFi, il existe une variété de composants utilisés pour les traitements IoAT – :

  • FlowFile est une unité de données qui transitent à travers le système. Il peut s’agir d’objets, de fichiers, de messages, de médias, d’événements…
  • Processor
    est un objet qui réalise des traitements (sur des FlowFiles, par exemple). Egalement appelé FlowFile Processor.
  • Connection est un objet permettant de relier des processeurs (processors).
  • Process
    Group
    est un ensemble de processeurs et de leurs connexions.

Ces objets sont contrôlés au sein d’une architecture Web. Le schéma ci-dessous – tiré du site officiel d’Apache NiFi – donne un aperçu de l’architecture d’Apache NiFi :


Comme on peut le souligner, Apache NiFi fonctionne au sein d’une JVM, installée sur un OS. Il est constitué des principaux composants suivants :

  • WebServer, qui permet d’héberger l’interface HTTP de NiFi.
  • Flow Controller, qui sert de broker facilitant les interactions entre processeurs à travers l’échange de FlowFiles.
  • Extension, Processor qui permet d’exécuter des traitements.
  • FlowFile Repository qui permet de stocker l’état d’un ou plusieurs FlowFiles actifs. L’implémentation par défaut d’un FlowFile Repository est basée sur une approche WAL (Write-Ahead Log).
  • Content Repository qui permet de stocker le contenu (en octets) d’un ou plusieurs FlowFiles. L’implémentation par défaut d’un Content Repository est basée sur une approche standard : stockage de chaque bloc de données au sein du système de fichiers.
  • Provenance Repository qui permet de stocker les événements associés à la provenance des données. Lesdits événements stockés sont indexés.

Apache NiFi peut également être implémenté en mode cluster : les flux de données peuvent être distribués et traités à travers différents nœuds d’un cluster NiFi. Le schéma ci-dessous donne un aperçu d’une architecture NiFi distribuée :


Dans ce type d’architecture, le design est basé sur une approche maître/esclave(s) où NiFi possède un ou plusieurs nœuds esclaves contrôlés par un simple NCM (NiFi Cluster Manager) faisant office de maître.

Le NCM permet de récolter les informations issues de chaque nœud – dont leur statut – et de répliquer les requêtes associées sur les flux de données qui transitent au sein du système NiFi.

A noter qu’en cas d’indisponibilité du NCM, les nœuds esclaves continueront de fonctionner afin de maintenir la disponibilité des flux. La contrepartie sera, en revanche, qu’aucun nouveau nœud ne pourra rejoindre le cluster et aucune réplication inter-nœuds des changements associés aux flux ne sera effectuée, tant que le NCM ne sera pas restauré.

Fonctionnalités-clés d’Apache NiFi

Apache NiFi possède différentes fonctionnalités opérationnelles, dont voici certaines des plus importantes :

  • QoS (Quality of Service) : contrôle et qualification des données avec possibilité de gérer la tolérance aux pertes (loss tolerance), la fiabilité des messages (guaranteed delivery),…
  • Security : support de 2 types de sécurité :
    • D’utilisateur à système : authenfication SSL bidirectionnelle à si un utilisateur rentre des informations sensibles – comme son mot-de-passe – au sein d’un flux, celles-ci seront encryptées côté serveur de sorte qu’elles ne soient jamais exposées côté client.
    • De système à système : sécurisation des flux de données via cryptage SSL, avec possibilité, pour un flux, de décrypter/encrypter un contenu via des clés partagées ou tout autre mécanisme de cryptographie.
  • Data Recovery, Data Recording : le Content Repository permet aux données d’être automatiquement enregistrées, mais aussi supprimées suivant leur ancienneté et fréquence d’utilisation, surtout en cas d’espace nécessaire. NiFi permet également de récupérer des données en rejouant des flux via le mécanisme WAL de FlowFile Repository.
  • Data Buffering : mise en cache des données en mouvement ou non. NiFi offre également la possibilité de gérer dynamiquement les pressions de mémoire (principe de back pressure).
  • Data Provenance :
    • Collecte de données à partir de chaque point des flux.
    • Traitement des données (indexation, merging, splitting,…).
    • Visualisation du contenu et des attributs.
  • Queue Prioritization : configuration d’un niveau de priorité par connexion (en fonction du temps, de l’ordre d’arrivée des données,…).
  • Clustering : voir sous-section précédente.

Cas classiques d’utilisation

Il existe quelques cas d’utilisation d’Apache NiFi : optimisation de flux de données issus de capteurs, analyse prédictive de données qualifiées, contrôle de la conformité des informations (avec amélioration de la transparence des flux de données, par exemple), optimisation des détections de fraudes, qualification des ingestions Big Data,…

Vous pouvez jeter un coup d’ici pour plus d’informations : https://hortonworks.com/hdf/use-cases/.

Pour aller plus loin…

Vous pouvez jeter un coup d’œil ici pour d’autres articles autour des Big Data et de HDP. Et également ici, pour d’autres articles autour de l’IoT.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s