Contexte
Dans le cadre du suivi de production et le monitoring Nifi, je vais vous présenter un moyen que nous utilisons pour sauvegarder l’ensemble des évènements « bulletin » au sein d’un cluster Nifi.
Après avoir évoqué les enjeux, je vous présenterai l’implémentation technique ainsi qu’une alternative avec Impala.
Composants utilisés
- CDP Private Cloud 7.1.2
- Cloudera Flow Management 2.0.1
- CentOS 7.5
- Hébergement VMWare interne
Enjeux
Je me suis basé sur un article de Pierre VILLARD pour développer ce cas d’usage. Le monitoring Nifi est un enjeu important, mais les ressources sur la toile permettant de se faire un avis sur le sujet sont rares. J’apporte donc un peu de notre expérience dans le domaine, en passant en revue notre pipeline d’ingestion de bulletin Nifi, dans Hive 3.
Le système de bulletins Nifi est très riche en information mais reste volatile sans configuration spécifique. Pour permettre un stockage de ces données et une analyse, il est possible via un ControllerSetting d’envoyer ces fameux bulletins à un point d’entré Nifi. La récupération se fait simplement car chaque bulletin est récupéré en tant que flowfile.
Le monitoring Nifi concrètement
Pour commencer, il faut créer un Input Port au niveau 0 du plan Nifi. Puis dans le Controller Setting, créer une SiteToSiteBulletinReportingTask en spécifiant l’Input Port :
Ensuite j’ai créé un processGroup qui contient l’ensemble de mon cas d’usage (plus simple pour le versionning) :
Et voici la pipeline d’enregistrement :
Penchons-nous en détail sur ce workflow :
- Conversion des records transmis par notre tâche de monitoring : transformation de JSON à Avro. Pourquoi ? Car la table Hive 3 alimentée par le PutHive3Streaming, ne marche qu’avec des records en Arvo (le schéma est nécessaire).
- Enregistrement des records Avro dans une table Hive
- LogAttribute afin de sauvegarder d’éventuelle erreurs d’insertion dans Hive
Il est important de noter que la partie Hive n’est pas une simple table. Il est nécessaire d’avoir une table au format ORC ainsi que certains paramètres Hive pour streamer des données dans une table Hive :
Je vous renvoie à un article sur la partie Hive 3 Streaming et les transactions ACID.
Alternative Impala
Si pour certaines raisons, streamer les données en temps réel dans Hive 3 n’est pas possible, voici le même workflow de monitoring Nifi pour insérer les données dans une table Impala
Cette approche est encore plus simple car elle ne nécessite pas de conversion spécifique. L’utilisation d’un DBCPConnectionPool branché sur Impala via un PutDatabaseRecord fait très bien le travail.
Pour plus de détail sur la configuration de ce DBCPConnectionPool, je vous renvoie à notre premier cas d’usage Nifi.
Conclusion
Ce workflow bien que simple, met en exergue une problématique souvent rencontrée : le suivis des évènements Nifi au sein d’un ou plusieurs clusters.
Le streaming dans Hive 3 peut être intéressant dans certains cas. Il est possible via Nifi de pousser ces bulletins dans quasiment n’importe quelle destination (MongoDB, ElasticSearch, SolR, Kudu, S3, etc…) On peut même imaginer des traitements spécifiques ou des filtrages sur la provenance du bulletin. Nifi possède plusieurs autres métriques de reporting, sur lesquelles on peut facilement transposer ce système : AzureLogAnalyticsProvenanceReportingTask, ControllerStatusReportingTask, MetricsReportingTask ou encore PrometheusReportingTask
Si vous avez des questions ou souhaitez des précisions sur ce workflow, n’hésitez pas à me contacter !