← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 12 mai 2023

Catégorie Data Engineering

Apache Flink : tout savoir sur le framework temps réel

Apache Flink est un système de traitement des données en temps réel et de traitement par lots à grande échelle. Il s'agit d'un projet open source développé par la fondation Apache, conçu pour offrir une haute disponibilité, une faible latence et une grande capacité de traitement des flux de données.

Flink fournit un modèle algorithmique unifié qui permet de traiter les données en temps réel et par lots de manière cohérente. Il prend en charge des opérations avancées telles que la transformation, le filtrage, l'agrégation et la jointure de données en continu. De plus, Flink est capable de gérer des données à grande échelle, ce qui en fait un choix populaire pour le traitement des données en temps réel dans les environnements Big Data.

Dans cet article, nous allons voir pourquoi Flink, contrairement à Spark Streaming, est un véritable framework de traitement de données en temps réel.

L'histoire d'Apache Flink remonte à la fin des années 2000, lorsque le projet Stratosphere a été initié par un groupe de chercheurs de l'Université technique de Berlin, en Allemagne. Le projet visait à développer un système de gestion et de traitement des données pour les environnements Big Data, avec un accent particulier sur le traitement des données en temps réel et parallèle.

Au fil des années, le projet Stratosphere a évolué et a attiré l'attention de la communauté open source. En 2014, le projet a été accepté en tant que projet Apache Incubator, ce qui a marqué le début de la collaboration avec la fondation Apache.

En 2015, le projet a été promu en tant que projet Apache de premier niveau et a été renommé Apache Flink. La version 1.0 d'Apache Flink a été publiée en mars 2015, marquant une étape importante dans le développement du projet.

Depuis lors, Apache Flink a connu une croissance significative et a gagné en popularité. Il est devenu l'un des principaux frameworks de traitement des données en temps réel et par lots, utilisé par de nombreuses entreprises et organisations à travers le monde.

Flink Logo

Voyons ensemble ce qui fait la force de Flink. Jusqu'ici, nous avons utilisé Apache Spark, et plus précisément le module Spark Streaming pour traiter des données en temps réel. Bien que facile à prendre en main, puisque l'on ré-utilise les mêmes fonctionnalités sur les RDD ou les DataFrames, Spark Streaming est plus une adaptation des fonctionnalités Spark pour du temps réel. En particulier, Spark Streaming procède à du micro-batch pour découper une source de données temps réel en plusieurs portions de RDD ou DataFrames.

Apache Flink est un framework spécialement dédié aux traitements distribués et stateful.


À lire aussi : découvrez notre formation Data Engineer


Streams

Les streams représentent les sources de données, qu'elles proviennent d'un serveur Web ou d'un système de fichiers.

Unbounded Streams

Nous différençions deux types de traitements des streams.

  • Le batch processing, tel que nous pouvons le faire avec pandas ou encore Spark SQL. Dans cette situation, le stream est bounded, c'est-à-dire qu'il existe une fin (antérieure ou postérieure) dans la génération des données. Par exemple, c'est le batch processing qui est utilisé lorsque l'on réalise des reportings journaliers.
  • Le stream processing est à l'inverse utilisé dans les situations ou le steam est unbounded, dont il n'existe potentiellement pas de fin dans la génération des données.

C'est cette dernière famille de traitement de données qui nous intéresse particulièrement.

Streaming Dataflow

Le principe de construction des applications Flink est assez simple. Chaque pipeline que l'on construit est appelé un Dataflow dans lequel plusieurs composants interviennent.

  • On dispose tout d'abord de sources, qui représente les entrées du pipeline. Flink est robuste pour pouvoir supporter plusieurs sources de données dans un même Dataflow, bien qu'en pratique, la plupart des pipelines n'intègrent qu'une seule source de données.
  • Sur les sources, des operators sont appliqués. Les operators représentent des transformations atomatiques, comme un map, un groupBy, etc.
  • Enfin, des sinks sont placés à la fin du Dataflow pour déterminer l'acheminement des données transformées. Cela permet par exemple d'envoyer les données en sortie du Dataflow sur plusieurs bases cibles.

Stateful ou stateless ?

Une des grosses particularités de Flink est que les opérations effectuées peuvent être stateful. Cette notion, assez commune en développement de programmes, signifie que les événements qui surviennent peuvent être traités non pas de manière indépendantes, mais par accumulation de plusieurs (ou tous) événements qui ont été réceptionnés par le passé.

En d'autres termes, il est possible d'effectuer des opérations sur des événements antérieurs, à l'instart des Window functions que nous avions pu utiliser avec Spark Streaming. Mais contraitement à Spark Streaming qui avait besoin d'utiliser des checkpoints, le stateful est pris en charge automatiquement sur Flink.

Très souvent, on considère Apache Flink comme un vrai framework de traitement en temps réel, car il n'utilise pas de micro-batch et a été justement conçu pour cette tâche.

Apache Flink propose un large éventail de fonctionnalités clés qui en font un choix populaire pour le traitement des données en temps réel et par lots à grande échelle. Voici quelques-unes des fonctionnalités les plus importantes de Flink :

  • Traitement des données en temps réel et par lots : Flink offre un modèle de programmation unifié qui permet de traiter les données en temps réel et par lots avec la même API. Cela permet aux développeurs de construire des pipelines de traitement cohérents pour différents types de données.
  • Haute disponibilité et tolérance aux pannes : Flink est conçu pour fournir une haute disponibilité en cas de pannes de matériel ou de logiciel. Il prend en charge la récupération automatique des pannes, la reprise après sinistre et la répartition des tâches de traitement sur un cluster de machines pour garantir la continuité du traitement.
  • Modèle de traitement distribué : Flink utilise un moteur de traitement distribué qui permet de diviser les tâches de traitement en petits sous-ensembles appelés tâches, et de les exécuter simultanément sur un cluster de machines. Cela permet de paralléliser efficacement le traitement et d'obtenir des performances élevées.
  • Support de la fenêtre temporelle : Flink permet de définir des fenêtres temporelles pour les opérations de traitement des flux de données en temps réel. Les fenêtres temporelles peuvent être basées sur le temps de traitement, le temps d'arrivée des événements ou des intervalles de temps spécifiques, ce qui facilite l'agrégation, la jointure et l'analyse des données basées sur des périodes de temps.
  • Traitement de flux SQL : Flink offre une interface SQL pour le traitement des flux de données en temps réel. Cela permet aux utilisateurs de formuler des requêtes SQL pour filtrer, transformer et analyser les flux de données, facilitant ainsi le traitement des données par les analystes et les utilisateurs non techniques.
  • Traitement de graphes : Flink fournit des bibliothèques et des opérations avancées pour le traitement de graphes. Cela permet d'effectuer des opérations complexes telles que les parcours de graphes, les calculs de connectivité et les algorithmes de graphes sur des données en temps réel.
  • Connectivité aux sources de données : Flink propose des connecteurs pour les sources de données populaires telles que Kafka, Hadoop, Elasticsearch, JDBC, etc. Cela facilite l'intégration de Flink dans les environnements existants et l'ingestion de données provenant de différentes sources.

À lire aussi : découvrez notre formation Data Engineer


Bien qu'Apache Flink soit un framework de traitement des données en temps réel et par lots très puissant, il présente également certaines limites.

  • Complexité de configuration : La configuration de Flink peut être complexe, en particulier lors de la mise en place d'un cluster de plusieurs machines. La configuration correcte des paramètres de cluster, des ressources, du parallélisme et des dépendances peut nécessiter une expertise et une compréhension approfondie du système.
  • Gestion de l'état : Flink maintient un état cohérent pour les opérations de traitement des données, ce qui peut être complexe à gérer, en particulier lorsque les opérations sont distribuées sur un cluster. La gestion de l'état peut avoir un impact sur les performances et la disponibilité du système, et nécessite une planification et une gestion appropriées.
  • Maintenance du cluster : Le déploiement et la maintenance d'un cluster Flink peuvent être une tâche complexe. Il faut gérer les ressources, la configuration du cluster, la surveillance, les mises à jour logicielles et la résolution des problèmes. Cela nécessite une expertise en administration système et une attention continue pour assurer un fonctionnement fluide du cluster.
  • Écosystème et intégration : Bien que Flink dispose d'un certain nombre de connecteurs pour les sources de données courantes, son écosystème peut être moins étendu par rapport à certains autres frameworks de traitement des données. L'intégration avec des outils et des technologies spécifiques peut nécessiter un développement personnalisé.

Malgré ces limitations, Flink reste une solution puissante pour le traitement des données en temps réel et par lots, offrant une grande flexibilité et des performances élevées dans de nombreux cas d'utilisation.

Articles similaires

Blog

7 févr. 2024

Data Engineering

Pendant de nombreuses années, le rôle des Data Engineers était de récupérer des données issues de différentes sources, systèmes de stockage et applications tierces et de les centraliser dans un Data Warehouse, dans le but de pouvoir obtenir une vision complète et organisée des données disponibles.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

4 déc. 2023

Data Engineering

Pour de nombreuses entreprises, la mise en place et la maintenant de pipelines de données est une étape cruciale pour avoir à disposition d'une vue d'ensemble nette de toutes les données à disposition. Un des challenges quotidien pour les Data Analysts et Data Engineers consiste à s'assurer que ces pipelines de données puissent répondre aux besoins de toutes les équipes d'une entreprise.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

14 nov. 2023

Data Engineering

Pour améliorer les opérations commerciales et maintenir la compétitivité, il est essentiel de gérer efficacement les données en entreprise. Cependant, la diversité des sources de données, leur complexité croissante et la façon dont elles sont stockées peuvent rapidement devenir un problème important.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article