Logo Blent.ai
← 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

23 mai 2023

Data Engineering

Apache Phoenix est une extension open-source de Apache HBase qui fournit une couche de requêtes SQL pour les données stockées dans HBase. Phoenix permet ainsi d'interagir sur les tables HBase à l'aide de requêtes SQL standard, sans avoir à écrire de code spécifique à HBase
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

15 mai 2023

Data Engineering

Apache Avro est un système de sérialisation de données et un format de données compact, rapide et polyvalent. Il a été développé par Apache Software Foundation et est conçu pour faciliter l'échange de données entre les différentes applications. Contrairement à d'autres formats comme CSV ou JSON, une des grandes particularités d'Apache Avro est qu'il utilise un schéma pour définir la structure des données, ce qui permet de sérialiser et de désérialiser les données de manière efficace, tout en garantissant la compatibilité entre les différentes versions des schémas.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

3 mai 2023

Data Engineering

Snowflake est une plateforme de Data Warehousing qui offre une solution Cloud aux problèmes de gestion, de stockage et d'analyse des données volumineuses et complexes.
Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Logo Blent

60 rue François 1er

75008 Paris

Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.

Organisme de formation n°11755985075.

Gestion des cookies

© 2023 Blent.ai | Tous droits réservés