[Big Data] Flink : concepts généraux

Ce billet présente Apache Flink.

Pour comprendre les concepts associés aux Big Data, à Hadoop,… vous pouvez aller ici. Et à Spark, ici.

Présentation de Flink

Flink est un système de traitement distribué de gros volumes de données construit autour de la vitesse, de la facilité d’utilisation, et de l’analyse temps-réel. Il a été développé, à l’origine, en 2010 à partir d’un projet issu de l’université technique de Berlin appelé Stratosphere, avant d’être rendu open source en 2014 en tant que projet Apache.

L’origine du mot « flink » vient de l’allemand et signifie en français « agile », à l’instar d’un écureuil (d’où l’origine du logo).

Pour comprendre l’utilité de Flink en comparaison d’une technologie comme Spark, référez-vous à la section Flink vs Spark : éléments de comparaison abordée plus loin.

Fonctionnement général de Flink

Présentation de l’écosystème Flink

Développé en Java et en Scala, Flink possède un ensemble de bibliothèques lui permettant de renforcer ses possibilités en matière d’analyse Big Data et de Machine Learning. Le schéma ci-dessous (tiré d’Apache) résume l’architecture de l’écosystème Flink :


Les couches principales de base sont :

  • CEP (Complex Event Processing), qui permet de détecter facilement les modèles d’événements complexes dans un flux de données sans fin. Cela donne la possibilité d’obtenir rapidement la main sur ce qui est vraiment important dans le traitement des données.
  • Table, qui permet à Flink d’exposer des jeux de données à travers l’API JDBC et de les requêter avec des scripts se rapprochant du langage SQL. Cette bibliothèque permet également d’effectuer des opérations ETL sur des données de formats divers (JSON, une base de données, etc…).
  • DataStream, qui permet de traiter des flux de données en temps-réel, via une approche de micro-batching. Son équivalent pour réaliser des opérations « batchées » est DataSet.
  • FlinkML, qui permet d’utiliser nativement des algorithmes communs au domaine du Machine Learning (classification, régression, clustering, etc…). Il s’agit d’une bibliothèque principalement dédiée à l’analyse prédictive.
  • Gelly, qui permet d’utiliser une bibliothèque de calculs graphiques parallèles, très utilisé dans le traitement d’une variété de données souvent volumineuses (réseaux sociaux, où des graphes de corrélations sont utilisés pour traiter les connexions entre utilisateurs ; l’astrophysique, pour établir une corrélation de planètes et de galaxies ; réseau, pour détermination du plus court chemin graphique pour faire transiter un paquet de données au sein d’un internet à fort traffic ;…).
    • Pour comprendre les raisons de sa création et de son introduction au sein de l’écosystème Flink, plus de détails ici.
    • Pour en savoir plus sur la partie programmation, vous pouvez aller ici. 

Flink est compatible avec une architecture YARN, et peut être utilisé aussi bien à distance que localement ou embarqué (au sein d’un cloud, par exemple).

La liste est non-exhaustive (il existe des bibliothèques NoSQL intégrées pour Cassandra,… par exemple), Flink étant, à l’heure de l’écriture du billet, en perpétuelle évolution.

Au coeur du moteur Flink

Le moteur d’exécution de Flink possède un certain nombre de fonctionnalités assurant son bon fonctionnement et sa robustesse :

  • Itération native.

Afin d’améliorer au maximum la vitesse des opérations, le moteur Flink permet de réaliser un traitement itératif sur les mêmes nœuds, plutôt que d’exécuter chaque itération en mode batch. Il supporte 2 types d’itérations :

  • Les itérations simples qui permettent d’assurer le traitement des flux de données successifs.
  • Les delta-itérations qui sont exécutées dans le cadre de l’amélioration de performances des itérations simples lorsque l’ensemble des traitements est plus dense et inclue des mises-à-jour à tenir en compte au cours de l’avancée des opérations. Cela est souvent le cas dans le domaine du Machine Learning (k-means, régressions,…) ou du graph processing (ranking de pages, calcul du plus court chemin, inférences,…).

Le schéma ci-dessous résume le fonctionnement de l’algorithme itératif de Flink :


  • Streaming.

Sachant que Spark est basé sur une architecture orientée traitements par lots (batch processing) pour supporter le streaming, Flink a été conçu à partir d’une architecture Kappa, et plus spécifiquement une architecture basée sur le streaming et pouvant supporter les traitements par lots. Cette approche permet à Flink d’être en mesure d’utiliser les mêmes algorithmes dans les deux modes de diffusion, que ce soit en streaming ou en lots, à l’instar de Spark, mais à voir besoin de se tourner vers une technologie comme Apache Storm si le besoin de réactivité à faible latence se fait ressentir.

  • Gestion d’états et des pannes.

Les opérations peuvent être stateful. Le moteur Flink garantit que, même dans le cas d’une erreur chaque tuple est représenté qu’une seule fois au sein du statut de l’opération et sera traitée en conséquence.

Pour obtenir ce comportement, Flink « marque » ses traitements qui circulent à travers le graphe des opérations. De cette façon, chaque opération sauvegardera son état chaque fois qu’il effectuera des traitements (on parle alors de checkpoint). Cela permet au moteur Flink de ne pas avoir à reproduire tous les traitements depuis le début en cas d’échec, puisqu’il suffira de consulter le dernier état sauvegardé (checkpoint) par l’opération en échec afin de déterminer les étapes restantes à traiter.

Ce mode de gestion des pannes classe Flink en tant que technologie capable de garantir le traitement des messages en mode « exactly once processing », à l’instar de Spark.

  • Gestion de la mémoire.

Flink part du postulat qu’un cluster doit être capable de gérer lui-même son performance tuning. C’est ainsi qu’il possède son propre système de gestion de la mémoire, séparé du garbage collector du framework JVM.

  • Optimisation basée sur le coût.

Comme dans l’univers SGBD, l’optimiseur Flink analyse les requêtes soumises et les traite suivant un plan d’exécution qu’il jugera optimal pour les temps de réponse. Pour mener à bien son travail, l’optimiseur Flink se base principalement sur les fonctions et les types de données utilisés au cours des traitements analysés.

Un exemple pertinent d’optimisation dynamique de traitements serait une combinaison de jointures triées durant la phase de mapping de données en entrée.

Flink vs Spark : éléments de comparaison

Flink Spark
Principaux paradigmes RDD, DataFrames. DataSet, DataStream.
Modèle de calcul Streaming total. Streaming partiel (micro-batching).
Niveau de garantie des traitements Traitement en une et une seule fois (exactly once). Traitement en une et une seule fois (exactly once).
Méthode d’itération Gestion cyclique de flux de données. Gestion via des boucles for (en dehors de la boucle, si opération jugée trop coûteuse par le moteur).
Gestion de la mémoire Gestion native et dynamique. Gestion déléguée, mais évolutions constantes grâce au projet Tungsten.
Niveau de latence Millisecondes. Secondes.
Mode d’optimisation des traitements Automatique sur l’ensemble des traitements. Manuel pour les jobs, automatisé pour les DataFrames et SQL (grâce à l’optimiseur Catalyst).

 

Grâce à son architecture basée sur le streaming, à sa capacité de gérer lui-même ses ressources mémoire, et à sa méthode d’itération cyclique et native, Flink offre généralement des niveaux de performance plus intéressant que Spark.

Pour aller plus loin…

Gardez un œil ici. D’autres articles autour du Big Data y seront pondus, y compris de nouvelles démonstrations plus techniques.

Si vous souhaitez approfondir votre lecture, vous pouvez également consulter le site officiel : https://flink.apache.org/.

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