← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 15 mai 2023

Catégorie Data Engineering

Apache Avro : tout savoir sur la sérialisation binaire

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. Cela signifie que les données sérialisées avec un certain schéma peuvent être lues et interprétées correctement même si le schéma a été mis à jour.

Dans cet aricle, nous allons voir en quoi Apache Avro est une alternative très robuste pour la sérialisation de données par rapport aux formats traditionnels.

Histoire d'Apache Avro

L'histoire d'Apache Avro remonte à l'année 2009, lorsque Doug Cutting, créateur d'Apache Lucene et co-créateur d'Apache Hadoop, a proposé la création d'un nouveau projet au sein de la fondation Apache. Ce projet visait à développer un système de sérialisation de données rapide et efficace, capable de faciliter l'échange de données entre différentes applications.

La proposition a été acceptée et le projet a été baptisé "Avro", et a été initialement développé en Java. Par la suite, il a été petit à petit porté dans d'autres langages de programmation tels que C, C++, C#, Python et Ruby. Son développement initial était axé sur l'intégration avec Apache Hadoop, un framework de traitement distribué pour le Big Data.

L'un des principaux objectifs de la conception d'Avro était de fournir un système de sérialisation efficace, capable de gérer l'évolution des schémas de données. Avro utilise des schémas définis au format JSON pour décrire la structure des données. Ces schémas permettent de sérialiser les données de manière compacte, tout en conservant des informations sur la structure des données elles-mêmes.

Logo Avro

À lire aussi : découvrez notre formation Data Engineer


Fonctionnement d'Apache Avro

Comme évoqué à plusieurs reprises, Avro fonctionne en utilisant un schéma pour décrire la structure des données et en fournissant des mécanismes de sérialisation et de désérialisation efficaces.

Définition du schéma

La première étape est la définition du schéma : tilise un schéma défini au format JSON pour décrire la structure des données. Le schéma spécifie les champs, leur type et leur ordre. Il peut également inclure des métadonnées supplémentaires telles que des noms, des espaces de noms et des docstrings pour documenter les données. Nous retrouvons la plupart des types élémentaires (null, int, float, string, ...) mais également des types plus complexes (record, enum, array, ...).

{
  "type": "record",
  "name": "schema",
  "namespace": "org.blent.schema",
  "fields": [
    { "name": "fname", "type": "string" },
    { "name": "lname", "type": "string" },
    { "name": "age", "type": ["int", "null"] }
  ]
}

En regardant le champ fields, il y a trois champs enregistrés par le schéma.

  • Le champ fname, de type string.
  • Le champ lname, de type string.
  • Le champ age, de type int mais qui peut être manquant.

Génération de code et sérialisation des données

Ensuite, à partir du schéma, Avro peut générer du code source dans différents langages de programmation (par exemple, Java, C#, Python). Ce code généré facilite la sérialisation et la désérialisation des données selon le schéma spécifié.

Lorsque des données doivent être sérialisées, Avro utilise le schéma correspondant pour encoder les données dans un format binaire compact. La sérialisation inclut également des informations sur le schéma lui-même, ce qui permet à Avro de traiter les éventuelles évolutions du schéma lors de la désérialisation.

Les données sérialisées peuvent être stockées dans des fichiers ou transmises sur un réseau. Grâce au format binaire compact utilisé pour minimiser la taille des données, cela permet de réduire l'espace de stockage nécessaire et la bande passante requise pour l'échange de données.

Désérialisation des données

Bien entendu, le principal intérêt de sérialiser les données au format binaire, outre le gain de place, réside également dans la capacité à désérialiser dans le même format et avec une forte consistance. Lorsque des données sérialisées doivent être lues ou utilisées, Avro utilise le schéma correspondant pour décoder les données binaires et les retransformer en une structure de données utilisable dans le langage de programmation cible.

Au même titre que certains formats de données comme Apache Parquet, le principal intérêt est de pouvoir lire des données sans avoir besoin d'inférer sur le type des colonnes, contrairement aux formats classiques comme CSV ou JSON qui ne contiennent pas de schémas de données, et dont l'outil utilisé (Pandas, Apache Spark, etc) nécessite un schéma de données en plus.

Gestion de l'évolution du schéma

Enfin, bien qu'un schéma peut sembler ajouter une contrainte forte en matière d'évolutivité sur le format des donées, Avro est conçu pour gérer la modification des schémas de données au fil du temps. Lors de la désérialisation, Avro peut interpréter les données sérialisées en utilisant le schéma actuel, tout en étant capable de traiter les anciennes versions du schéma. Cela garantit la compatibilité entre les différentes versions des schémas lors de l'échange de données.

Cette capacité à gérer plusieurs schémas de données est très importante, car de nombreuses situations exigent de mettre à jour des données pour des besoins opérationnels différents. En règle générale, pour gérer une multitude de schémas et de versions associées, les entreprises utilisent souvent des registre de schémas que les applications peuvent utiliser pour déterminer quels schémas et quelles versions à utiliser pour lire tel fichier.

Avantages et inconvénients d'Apache Avro

Apache Avro présente plusieurs avantages qui en font un choix populaire pour la sérialisation de données et l'échange de données entre les applications.

  • Interopérabilité : comme de nombreux formats de données, Avro est indépendant du langage de programmation, ce qui signifie que les données sérialisées peuvent être échangées facilement entre des applications écrites dans différents langages. Cela facilite l'intégration de systèmes hétérogènes et la communication entre des composants développés dans des langages variés.
  • Évolutivité : Avro prend en charge l'évolution des schémas de données avec un système de versions. Cela permet alors de mettre à jour le schéma sans casser la compatibilité avec les versions précédentes. On peut également ajouter, supprimer ou modifier certains champs dans les données sans avoir à effectuer des modifications drastiques dans les applications utilisant ces données.
  • Efficacité en termes de taille : les données sérialisées avec Avro sont stockées de manière compacte grâce à son format binaire. Il utilise également la définition du schéma pour minimiser la redondance des informations dans les données sérialisées, ce qui permet de réduire la taille des données par rapport à d'autres formats de sérialisation.
  • Traitement par lots : Avro est conçu pour faciliter le traitement par lots de données à grande échelle. Il s'intègre bien avec les frameworks de traitement de données distribués tels que Apache Hadoop et Apache Spark, permettant ainsi le traitement efficace et parallèle de grandes quantités de données.
  • Compatibilité avec les systèmes de streaming : Avro s'intègre également très bien avec des systèmes de streaming comme Apache Kafka. Il permet la sérialisation et la désérialisation rapides des données en continu, facilitant ainsi le traitement en temps réel et la diffusion de données en continu.

À lire aussi : découvrez notre formation Data Engineer


Néanmoins, l'utilisation d'un schéma peut constituer un inconvénient dans certaines situations. En effet, la définition des schémas Avro peut être complexe, en particulier pour les structures de données complexes ou les schémas imbriqués. La gestion des schémas peut demander une attention et une expertise supplémentaires, surtout lorsque des modifications de schéma sont nécessaires.

De plus, Avro est basé sur des schémas définis de manière explicite, ce qui signifie que la sérialisation et la désérialisation des données nécessitent que les schémas correspondants soient disponibles. Si un schéma n'est pas disponible ou incompatible, cela peut entraîner des erreurs lors de la lecture ou de l'écriture des données.

Enfin, bien qu'Avro nous offre la possibilité d'évoluer les schémas de données, cela peut être un processus complexe, en particulier lorsqu'il s'agit de gérer les schémas en production et d'assurer la compatibilité avec les versions précédentes. La gestion de la compatibilité entre les différentes versions de schéma peut nécessiter une planification et une gestion adéquates.

En résumé, Apache Avro est un excellent choix pour la sérialisation de données au format binaire, à la fois avec le gain de place lors du stockage, mais aussi grâce à l'utilisation d'un schéma. En revanche, ce dernier point rajoute une complexité à l'utilisation de ce format de données, contrairement aux formats plus standards comme CSV ou JSON.

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