Le match des infrastructures big data temps réel : Spark rafle la mise

Le match des infrastructures big data temps réel : Spark rafle la mise Depuis une dizaine d'années, trois frameworks open source de la mouvance Hadoop proposent de traiter les flux de données en temps réel. Partis sur la même ligne départ, où en sont-ils aujourd'hui ?

En matière de big data, un certain nombre de cas d'usage ne se satisfont pas d'un traitement des données par lots (ou batch). La lutte contre la fraude, la cybersécurité, la détection d'anomalies dans la production industrielle, le suivi du trafic routier ou encore la recommandation de produits sur un site d'e-commerce exigent de traiter des flux de données en temps réel pour fournir des résultats quasi immédiatement. Pour répondre à cette problématique, trois frameworks open source spécialisés dans le streaming de données ont émergé au tournant des années 2010 dans la galaxie des offres Hadoop. Soit, par ordre d'apparition, Spark, Flink et Storm. A ce trio, on peut ajouter Kafka Streams qui donne une dimension streaming à Kafka, framework dédié au traitement d'événements. Tous sont proposés sous licence Apache.

Originellement, ces frameworks répondent à deux philosophies différentes. Flink et Storm font du traitement au fil de l'eau – soit du temps réel en natif - tandis que Spark procède par micro-batchs pour traiter et produire des résultats toutes les X millisecondes pour s'approcher du temps réel.

Comparatif des infrastructures big data temps réel
  Apache Storm Apache Spark Apache Flink
Année de création 2011 2009 2010
Origine Twitter Université de Berkeley Université de Berlin
Nature du traitement Traitement d'événements Micro-batchs Traitement en temps réel
Langages supportés Clojure, Java Java, Python, R, Scala Java, Python, Scala 
Distributeurs Hadoop intégrant le framework - Cloudera, Hortonworks et MapR -
Partenariats éditeurs - Talend, Dataiku Talend
Editeur commercial - Databricks Data Artisans (racheté par Alibaba)
Service managé en mode cloud Apache Storm sur Azure HDInsight Apache Spark sur Amazon EMR, Spark sur Azure HDInsight, Cloud Dataproc de Google Cloud (Spark + Hadoop) Apache Flink sur Amazon EMR
Références Yahoo!, Twitter, Spotify, Groupon... Uber, ING, Criteo, Zalando... Alibaba, AWS, CapitalOne, OVH, Bouygues Telecom...

Selon Christophe Parageaud, expert senior data et architecture Java au sein du cabinet Ippon Technologies, "d'autres critères de choix sont également à prendre en compte comme la maturité du framework, sa popularité au sein des communautés de développeurs ou encore le support de la solution par un éditeur commercial. Autant de gages de pérennité et d'évolutivité."

Spark, le plus populaire

En termes de popularité, Spark est passé loin devant ses concurrents. Il suffit pour s'en persuader de voir le nombre de requêtes associées au framework sur Google Trends. Le framework conçu dans le prestigieux AMPLab de l'Université de Californie à Berkeley a, de fait, tout pour plaire sur le papier. Ce qui était son principal handicap (le traitement des données en mode micro-batch et non en flux) a été surmonté il y a deux ans avec la sortie de sa version 2.0. Pour l'occasion, la nouvelle fonctionnalité Spark Streaming introduit comme son nom l'indique la gestion du streaming de données. Depuis cette version, Spark s'interface également avec TensorFlow pour intégrer la dimension deep learning. "Un plus inégalé", selon Razvan Bizoï, consultant indépendant en architecture de base de données, et formateur à l'institut Orsys.

"Il est intéressant dans un esprit DevOps qu'un même framework puisse être utilisé par des data scientists et des data ingénieurs"

Spark a été créé en Scala mais supporte aussi Java, Python et R, ces deux derniers langages étant plébiscités par les statisticiens et data scientists. "Il est intéressant dans un esprit DevOps qu'un même framework puisse être utilisé par des data scientists et des data ingénieurs", observe Christophe Parageaud.

Spark a rapidement proposé l'exactly one et le fenêtrage. C'est-à-dire, la prise en compte des événements sur une période donnée (ou fenêtre temporelle). Il serait aussi plus robuste et résilient que ses concurrents. Autre avantage de poids : il est intégré par les distributeurs Hadoop que sont Cloudera, Hortonworks et MapR.

Enfin, Spark est soutenu par une communauté open source active et étendue. Avec Databricks, il dispose d'un éditeur de poids qui l'enrichit de fonctionnalités avancées, tout en proposant des prestations d'administration et de support. Fondée par les créateurs originaux de Spark (notamment Matei Zaharia, qui est son directeur technique), la société a levé 250 millions de dollars en février dernier avec pour objectif d'accroître sa présence en Europe.

A l'heure du bilan, Razvan Bizoï a du mal à trouver des défauts à Spark si ce n'est le traitement de données de type graphe ou le manque de maturité des outils de machine learning.

Storm, en perte de vitesse

Quant à Storm, il s'agit du framework le plus récent mais aussi celui qui a émergé le plus vite. Après des débuts prometteurs, il est aujourd'hui en perte de vitesse. Conçu par des développeurs de Twitter, Storm reste un outil intéressant pour récupérer les flux en provenance des réseaux sociaux mais cumule plusieurs handicaps pour les autres cas d'usage. Razvan Bizoï note que "si Storm est né dans la mouvance big data, il n'est pas intégré nativement aux clusters de type Hadoop."

Par ailleurs, Storm a été créé principalement en Clojure, un langage de programmation plutôt exotique. Depuis, l'architecture de Storm a été retravaillée, notamment à l'occasion de la sortie de sa version 2.0, et ses principales fonctionnalités ont été implémentées en Java. Si cela a rendu les APIs plus faciles à gérer et à développer, Java n'est pas pour autant le langage le plus souple à manipuler.

Pour Christophe Parageaud, la communauté Storm a aussi commis un péché originel en proposant sur le tard la notion d'"exactly once", soit la garantie qu'un événement ne soit traité qu'une seule fois. Dans un calcul financier, la prise en compte deux fois d'une même opération faussera mécaniquement les résultats. Depuis, un autre framework, baptisé Trident, étend les capacités de Storm et corrige cette erreur, tout en donnant à l'infrastructure open source plus de souplesse en matière de gestion du dimensionnement des ressources informatiques.

Flink, l'éternel challenger

Face à Spark, Flink fait figure de bon élève. Il n'atteint pas pour autant le même degré de popularité. Flink a été développé avant le décollage de Spark sous le nom de Stratosphere par des chercheurs de l'université technique de Berlin. Par la suite, Flink a pris de l'avance sur de nombreux points. Gérant nativement les flux temps réel, il a aussi proposé plus rapidement le fenêtrage, l'exactly one. Par ailleurs, il supporte Java, Python et Scala.

Alors pourquoi n'a-t-il pas distancé Spark ? Son origine européenne pourrait avoir été perçue comme un inconvénient. L'université de Berlin n'a pas la même force de traction que celle de Berkeley. Principale conséquence : une communauté de contributeurs nettement moins dynamique. Par ailleurs, Flink n'est pas intégré par les distributeurs Hadoop.

La donne pourrait changer avec le rachat de Data Artisans, la société qui industrialise des services pour Flink, par Alibaba 

La donne pourrait changer avec le rachat, en janvier dernier, de Data Artisans, la société allemande qui industrialise des services pour Flink, par Alibaba pour 90 millions d'euros. Le géant de l'e-commerce chinois devrait donner une nouvelle dimension à la start-up berlinoise qui propose des outils d'intégration prêts à l'emploi, une interface utilisateur de visualisions des flux ou encore des fonctionnalités d'authentification.

Les entreprises utilisant à la fois Spark et Flink pourraient être tentées par le projet Apache Beam qui permet de "switcher" entre les deux frameworks.

Enfin, on notera que plusieurs fournisseurs de cloud proposent des services managés de big data intégrant la dimension temps réel en s'appuyant sur Spark et Flink. C'est le cas d'Amazon qui a porté Apache Spark sur son service Elastic MapReduce. Certains développent même leurs propres solutions de streaming de données, comme Google avec Dataflow, Microsoft avec Azure Stream Analytics, ou encore Amazon avec Kinesis. Des offres packagées qui permettent d'expérimenter des cas d'usage sans investir dans une infrastructure dédiée.