Je développe une solution en Java qui communique avec un ensemble de périphériques par le biais de REST API qui appartiennent à différents fournisseurs. Ainsi, pour chaque fournisseur, il existe un ensemble de processus que je dois exécuter dans ma solution. Cependant, ces processus seront modifiés en fonction de chaque fournisseur. Vous trouverez ci-dessous les processus de haut niveau à exécuter.
Retrieve an XML file from a folder
Process the XML file
Perform some image processing
Schedule a job and execute it on the scheduled time
Storing data on a MySQL DB and perform some REST calls to outside APIs
Donc, pour un fournisseur peut avoir tous les processus ci-dessus. Mais pour un autre, il pourrait ne pas y avoir de processus (exemple: traitement d’image). Les éléments suivants doivent pouvoir être obtenus à partir de la solution sélectionnée.
I should be able to create custom workflows for new vendors
Need to identify any failures that have been occurred within the workflow and perform retry mechanisms.
Should be able to execute some functions parallelly (Eg: Image processing)
Scalable
Opensource
On m'a donc demandé d'examiner des gestionnaires de flux de travaux tels que Nifi/Airflow/Falcon. J'ai fait des recherches sur eux mais je n'ai pas pu finaliser la solution la plus appropriée.
REMARQUE: Il n'est PAS nécessaire d'utiliser Hadoop ou tout autre cluster et la fréquence des flux de données n'est pas très élevée
Actuellement, je pense à utiliser Nifi. Mais est-ce que quelqu'un peut donner votre avis là-dessus? Quelle serait la meilleure solution pour mon cas d'utilisation?
Apache NiFi n'est pas un gestionnaire de flux de travail au même titre que Apache Airflow ou Apache Oozie. C'est un outil de flux de données - il achemine et transforme les données. Il n'est pas destiné à planifier des tâches, mais vous permet plutôt de collecter des données à partir de plusieurs emplacements, de définir des étapes discrètes pour traiter ces données et de les acheminer vers différentes destinations.
Apache Falcon est à nouveau différent en ce sens qu’il vous permet de définir et de gérer plus facilement les jeux de données HDFS. C'est effectivement la gestion de données au sein d'un cluster HDFS.
Selon votre description, NiFi serait un complément utile à vos besoins. Il serait en mesure de collecter votre fichier XML, de le traiter de quelque manière que ce soit, de stocker les données dans MySQL et d'effectuer des appels REST. Il serait également facilement configurable pour les nouveaux fournisseurs et supporterait bien les pannes. Il exécute la plupart des fonctions en parallèle et peut être redimensionné en un réseau NiFi en cluster avec plusieurs ordinateurs hôtes. Il a été conçu pour la performance et la fiabilité.
Ce dont je ne suis pas sûr, c'est de la capacité de traitement de l'image. Il existe certains processeurs (extraire les métadonnées de l'image, redimensionner l'image), mais vous devrez sinon développer un nouveau processeur en Java, ce qui est relativement facile. Ou, si le traitement de l'image utilise Python ou un autre langage de script, vous pouvez utiliser l'un des processeurs ExecuteScript.
La «planification de travaux» à l'aide de NiFi n'est pas recommandée.
Divulgation complète: je suis un contributeur Apache NiFi.
J'utilise nifi avec un cas d'utilisation similaire. En ce qui concerne la planification, j'apprécie le fonctionnement de nifi avec Kafka. Certains scripts sont programmés pour s'exécuter avec une fréquence de crontab. Il suffit d'ajouter le message dans les sujets Kafka, lequel sujet est écouté par nifi, puis lance l'orchestration pour le chargement, la transformation, la récupération, l'indexation. , stockant, etc., vous pouvez toujours manipuler HttpRequest
pour pouvoir faire un peu "récepteurs Webhook" afin de déclencher un processus à partir d'un HTTP POST
externe, encore une fois, pour des déploiements simples (ceux-ci vous connectez et jouez sur une seule machine) cronjob se charge de la tâche. Pour le traitement des images, j'ai un lecteur d'image OCR avec python connecté à un processeur ExecuteScript
et un calcul du visage avec opencv
avec ExecuteCommand
processeur, la contre-pression de la nifi automatique a résolu de nombreux problèmes que j'ai rencontrés en exécutant uniquement le script python et la commande par lui-même.