Le traitement des données volumineuses (big data) est l’une des procédures les plus complexes auxquelles les organisations sont confrontées. Le processus se complique lorsque vous disposez d’un grand volume de données en temps réel.

Dans ce billet, nous allons découvrir ce qu’est le traitement des big data, comment il est effectué, et explorer Apache Kafka et Spark – les deux outils de traitement de données les plus connus !

Qu’est-ce que le traitement des données ? Comment se fait-il ?

Le traitement des données est défini comme toute opération ou ensemble d’opérations, effectuées ou non à l’aide d’un processus automatisé. Il peut être considéré comme la collecte, l’ordonnancement et l’organisation d’informations selon une disposition logique et appropriée pour l’interprétation.

data-processing

Lorsqu’un utilisateur accède à une base de données et obtient les résultats de sa recherche, c’est le traitement des données qui lui permet d’obtenir les résultats dont il a besoin. L’information extraite comme résultat de la recherche est le résultat du traitement des données. C’est pourquoi les technologies de l’information sont centrées sur le traitement des données.

Le traitement traditionnel des données était effectué à l’aide d’un simple logiciel. Cependant, avec l’émergence du Big Data, les choses ont changé. Le Big Data désigne des informations dont le volume peut dépasser la centaine de téraoctets et les pétaoctets.

De plus, ces informations sont régulièrement mises à jour. Il s’agit par exemple de données provenant de centres de contact, de médias sociaux, de données boursières, etc. Ces données sont parfois également appelées “flux de données” – un flux constant et incontrôlé de données. Sa principale caractéristique est que les données n’ont pas de limites définies, de sorte qu’il est impossible de dire quand le flux commence ou se termine.

Les données sont traitées au fur et à mesure qu’elles arrivent à destination. Certains auteurs parlent de traitement en temps réel ou en ligne. Une approche différente est le traitement par blocs, par lots ou hors ligne, dans lequel des blocs de données sont traités dans des fenêtres temporelles d’heures ou de jours. Souvent, le lot est un processus qui s’exécute la nuit, consolidant les données de la journée. Il arrive que des fenêtres temporelles d’une semaine, voire d’un mois, génèrent des rapports obsolètes.

Étant donné que les meilleures plateformes de traitement des Big Data via le streaming sont des sources ouvertes telles que Kafka et Spark, ces plateformes permettent l’utilisation d’autres plateformes différentes et complémentaires. Cela signifie qu’étant open source, elles évoluent plus rapidement et utilisent plus d’outils. De cette manière, les flux de données sont reçus d’autres endroits à un rythme variable et sans interruption.

Nous allons maintenant examiner deux des outils de traitement de données les plus connus et les comparer :

Apache Kafka

Apache K afka est un système de messagerie qui permet de créer des applications de streaming avec un flux de données continu. Créé à l’origine par LinkedIn, Kafka est basé sur un journal ; un journal est une forme de stockage de base car chaque nouvelle information est ajoutée à la fin du fichier.

Kafka est l’une des meilleures solutions pour le big data car sa principale caractéristique est son débit élevé. Avec Apache Kafka, il est même possible de transformer un traitement par lots en temps réel,

Apache Kafka est un système de messagerie de type “publish-subscribe” dans lequel une application publie et une application qui s’abonne reçoit des messages. Le temps qui s’écoule entre la publication et la réception d’un message peut être de l’ordre de la milliseconde, de sorte qu’une solution Kafka présente une faible latence.

Fonctionnement de Kafka

L’architecture d’Apache Kafka comprend des producteurs, des consommateurs et le cluster lui-même. Le producteur est toute application qui publie des messages dans le cluster. Le consommateur est toute application qui reçoit des messages de Kafka. Le cluster Kafka est un ensemble de nœuds qui fonctionnent comme une instance unique du service de messagerie.

kafka-apis
Fonctionnement de Kafka

Un cluster Kafka est composé de plusieurs courtiers. Un courtier est un serveur Kafka qui reçoit les messages des producteurs et les écrit sur le disque. Chaque courtier gère une liste de sujets, et chaque sujet est divisé en plusieurs partitions.

Après avoir reçu les messages, le courtier les envoie aux consommateurs enregistrés pour chaque sujet.

Les paramètres d’Apache Kafka sont gérés par Apache Zookeeper, qui stocke les métadonnées du cluster telles que l’emplacement des partitions, la liste des noms, la liste des sujets et les nœuds disponibles. Ainsi, Zookeeper maintient la synchronisation entre les différents éléments du cluster.

Zookeeper est important car Kafka est un système distribué, c’est-à-dire que l’écriture et la lecture sont effectuées par plusieurs clients simultanément. En cas de défaillance, le Zookeeper élit un remplaçant et reprend l’opération.

Cas d’utilisation

Kafka est devenu populaire, en particulier pour son utilisation en tant qu’outil de messagerie, mais sa polyvalence va au-delà, et il peut être utilisé dans une variété de scénarios, comme dans les exemples ci-dessous.

Messagerie

Forme de communication asynchrone qui découple les parties qui communiquent. Dans ce modèle, une partie envoie les données sous forme de message à Kafka, afin qu’une autre application les consomme ultérieurement.

Suivi des activités

Permet de stocker et de traiter les données relatives à l’interaction d’un utilisateur avec un site web, telles que les pages vues, les clics, la saisie de données, etc.

Métriques

Il s’agit d’agréger des données et des statistiques provenant de sources multiples afin de générer un rapport centralisé.

Agrégation de journaux

Agrégation et stockage centralisés de fichiers journaux provenant d’autres systèmes.

Traitement des flux

Le traitement des pipelines de données se compose de plusieurs étapes, au cours desquelles les données brutes sont consommées à partir de sujets et agrégées, enrichies ou transformées en d’autres sujets.

Pour prendre en charge ces fonctionnalités, la plateforme fournit essentiellement trois API :

  • API Streams : Elle agit comme un processeur de flux qui consomme les données d’un sujet, les transforme et les écrit dans un autre sujet.
  • API Connecteurs : Elle permet de connecter des thèmes à des systèmes existants, tels que des bases de données relationnelles.
  • API de production et de consommation : Elles permettent aux applications de publier et de consommer des données Kafka.

Avantages

Répliqué, partitionné et ordonné

Les messages dans Kafka sont répliqués à travers des partitions sur des nœuds de cluster dans l’ordre où ils arrivent pour assurer la sécurité et la rapidité de livraison.

Transformation des données

Avec Apache Kafka, il est même possible de transformer le traitement par lots en temps réel à l’aide de l’API de flux ETL par lots.

Accès séquentiel au disque

Apache Kafka persiste le message sur le disque et non en mémoire, ce qui est censé être plus rapide. En fait, l’accès à la mémoire est plus rapide dans la plupart des situations, en particulier lorsqu’il s’agit d’accéder à des données situées à des emplacements aléatoires dans la mémoire. Cependant, Kafka effectue des accès séquentiels et, dans ce cas, le disque est plus efficace.

Apache Spark

Apache Spark est un moteur informatique de big data et un ensemble de bibliothèques pour le traitement de données parallèles sur des clusters. Spark est une évolution de Hadoop et du paradigme de programmation Map-Reduce. Il peut être 100 fois plus rapide grâce à son utilisation efficace de la mémoire qui ne maintient pas les données sur les disques pendant le traitement.

image-17

Spark est organisé en trois niveaux :

  • API de bas niveau : Ce niveau contient les fonctionnalités de base pour exécuter des tâches et d’autres fonctionnalités requises par les autres composants. D’autres fonctions importantes de cette couche sont la gestion de la sécurité, du réseau, de la planification et de l’accès logique aux systèmes de fichiers HDFS, GlusterFS, Amazon S3 et autres.
  • API structurées : Le niveau API structuré traite de la manipulation des données par le biais de DataSets ou de DataFrames, qui peuvent être lus dans des formats tels que Hive, Parquet, JSON, et d’autres. En utilisant SparkSQL (API qui nous permet d’écrire des requêtes en SQL), nous pouvons manipuler les données comme nous le souhaitons.
  • Haut niveau : Au plus haut niveau, nous avons l’écosystème Spark avec diverses bibliothèques, y compris Spark Streaming, Spark MLlib et Spark GraphX. Elles sont responsables de l’ingestion de flux et des processus environnants, tels que la récupération en cas de crash, la création et la validation de modèles classiques d’apprentissage automatique et la gestion des graphes et des algorithmes.

Fonctionnement de Spark

L’architecture d’une application Spark se compose de trois parties principales :

Leprogramme pilote: Il est responsable de l’orchestration de l’exécution du traitement des données.

Cluster Manager: C’est le composant responsable de la gestion des différentes machines d’un cluster. Il n’est nécessaire que si Spark fonctionne de manière distribuée.

Workers Nodes (nœuds de travail): Ce sont les machines qui exécutent les tâches d’un programme. Si Spark est exécuté localement sur votre machine, il jouera le rôle d’un programme pilote et d’un nœud de travail. Cette façon d’exécuter Spark est appelée Standalone.

cluster-overview
Vue d’ensemble des clusters

Le code Spark peut être écrit dans un certain nombre de langages différents. La console Spark, appelée Spark Shell, est interactive pour l’apprentissage et l’exploration des données.

L’application Spark se compose d’un ou plusieurs Jobs, ce qui permet de prendre en charge le traitement de données à grande échelle.

Lorsque nous parlons d’exécution, Spark a deux modes :

  • Client : Le pilote s’exécute directement sur le client, sans passer par le Resource Manager.
  • Cluster : Le pilote s’exécute sur l’Application Master à travers le Resource Manager (en mode Cluster, si le client se déconnecte, l’application continuera à fonctionner).

Il est nécessaire d’utiliser Spark correctement afin que les services liés, comme le Resource Manager, puissent identifier le besoin de chaque exécution, fournissant ainsi la meilleure performance. C’est donc au développeur de connaître la meilleure façon d’exécuter ses jobs Spark, en structurant l’appel effectué, et pour cela, vous pouvez structurer et configurer les exécuteurs Spark comme vous le souhaitez.

Les jobs Spark utilisent principalement de la mémoire, il est donc courant d’ajuster les valeurs de configuration Spark pour les nœuds de travail des exécuteurs. En fonction de la charge de travail Spark, il est possible de déterminer qu’une certaine configuration Spark non standard fournit des exécutions plus optimales. A cette fin, des tests de comparaison entre les différentes options de configuration disponibles et la configuration Spark par défaut peuvent être effectués.

Cas d’utilisation

Apache Spark permet de traiter d’énormes quantités de données, qu’elles soient en temps réel ou archivées, structurées ou non. Voici quelques-uns de ses cas d’utilisation les plus courants.

Enrichissement des données

Les entreprises utilisent souvent une combinaison de données historiques sur les clients et de données comportementales en temps réel. Spark peut aider à construire un pipeline ETL continu pour convertir les données d’événements non structurées en données structurées.

Détection d’événements déclencheurs

Spark Streaming permet de détecter et de répondre rapidement à un comportement rare ou suspect qui pourrait indiquer un problème potentiel ou une fraude.

Analyse de données de session complexes

Grâce à Spark Streaming, les événements liés à la session de l’utilisateur, tels que ses activités après s’être connecté à l’application, peuvent être regroupés et analysés. Ces informations peuvent également être utilisées en continu pour mettre à jour les modèles d’apprentissage automatique.

Avantages

Traitement itératif

Si la tâche consiste à traiter des données de manière répétitive, les RDD (Resilient Distributed Datasets) de Spark permettent d’effectuer plusieurs opérations de mapping en mémoire sans avoir à écrire les résultats intermédiaires sur le disque.

Traitement graphique

Le modèle de calcul de Spark avec l’API GraphX est excellent pour les calculs itératifs typiques du traitement graphique.

Apprentissage automatique

Spark dispose de MLlib – une bibliothèque intégrée d’apprentissage automatique qui propose des algorithmes prêts à l’emploi qui s’exécutent également en mémoire.

Kafka contre Spark

Même si l’intérêt des utilisateurs pour Kafka et Spark est presque similaire, il existe quelques différences majeures entre les deux.

#1. Traitement des données

data-processing-1

Kafka est un outil de stockage et de streaming de données en temps réel responsable du transfert de données entre les applications, mais il n’est pas suffisant pour construire une solution complète. C’est pourquoi d’autres outils sont nécessaires pour les tâches que Kafka n’accomplit pas, comme Spark. Spark, quant à lui, est une plateforme de traitement de données en mode batch-first qui extrait les données des sujets Kafka et les transforme en schémas combinés.

#2. Gestion de la mémoire

memory-management

Spark utilise Robust Distributed Datasets (RDD) pour la gestion de la mémoire. Au lieu d’essayer de traiter d’énormes ensembles de données, il les répartit sur plusieurs nœuds d’un cluster. En revanche, Kafka utilise un accès séquentiel similaire à HDFS et stocke les données dans une mémoire tampon.

#3. Transformation ETL

Spark et Kafka prennent tous deux en charge le processus de transformation ETL, qui copie les enregistrements d’une base de données vers une autre, généralement d’une base transactionnelle (OLTP) vers une base analytique (OLAP). Cependant, contrairement à Spark, qui est doté d’une capacité intégrée pour le processus ETL, Kafka s’appuie sur l’API Streams pour le prendre en charge.

#4. Persistance des données

data-in-multiple-locations

L’utilisation de RRD par Spark vous permet de stocker les données à plusieurs endroits pour une utilisation ultérieure, alors que dans Kafka, vous devez définir des objets dataset dans la configuration pour persister les données.

#5. Difficulté

Spark est une solution complète et plus facile à apprendre grâce à sa prise en charge de divers langages de programmation de haut niveau. Kafka dépend d’un certain nombre d’API différentes et de modules tiers, ce qui peut rendre son utilisation difficile.

#6. Récupération

Spark et Kafka proposent tous deux des options de récupération. Spark utilise RRD, ce qui lui permet de sauvegarder les données en continu et, en cas de défaillance d’un cluster, de les récupérer.

data-recovery

Kafka réplique continuellement les données à l’intérieur du cluster et entre les brokers, ce qui vous permet de passer d’un broker à l’autre en cas de défaillance.

Similitudes entre Spark et Kafka

Apache SparkApache Kafka
OpenSourceOpenSource
Construire une application de streaming de donnéesConstruire une application de flux de données
Supporte le traitement par étatPrise en charge du traitement par état
Prise en charge de SQLPrise en charge de SQL
Similitudes entre Spark et Kafka

Le mot de la fin

Kafka et Spark sont tous deux des outils open-source écrits en Scala et Java, qui vous permettent de créer des applications de streaming de données en temps réel. Ils ont plusieurs points communs, notamment le traitement avec état, la prise en charge de SQL et l’ETL. Kafka et Spark peuvent également être utilisés comme des outils complémentaires pour aider à résoudre le problème de la complexité du transfert de données entre les applications.