Spark Vs Flink

par Vincent GROB

Flink et Spark sont deux frameworks de traitement de données open sources soutenus et développés par la fondation Apache. La première version de Flink a été publiée en Mai 2011 et se dernière version est la 1.9.0. La première version de Spark en Mai 2014 et sa dernière version est la 2.4.0.

Langages supportés :

Les langages supportés par ces deux Frameworks sont Java, Scala et Python. 

Spark ayant été au préalable développé en Scala, il est, dans la plupart des contextes recommandé de développer avec ce langage.

Flink a été développé en Scala et en Java. Il n’existe pas de recommandation spécifique de la part des contributeurs, on conseillera cependant d’utiliser Scala ou Java car ce sont les langages avec lesquels le Framework a été construit.

 

Contextes d’utilisation :

Bien que Spark et Flink soient tous deux utilisés pour le traitement de données ils ne sont pas nécessairement pertinents dans le même contexte.

En effet Spark est orienté pour les traitements de données par lots (ou Batch en Anglais) alors que Flink est orienté pour les traitements de données par flux (ou Streaming en Anglais).

Si on devait donner des exemples, Spark serait plus pertinent lorsque l’on a besoin de traiter des événements qui sont déjà pré stockés dans un format brut (log.gz ou avro), alors que Flink serait quant à lui plus pertinent lorsque l’on a besoin de traiter les évènements et les stocker au moment de leur apparition de manière continue.

Malgré ces recommandations, il est techniquement possible de faire du traitement par lot en Flink et du traitement par flux en Spark, le fait est que le framework n’a pas été, initialement conçu dans cette optique.

Spark et Flink fonctionnent tous les deux dans l'écosystème Hadoop.

 

Installation et compatibilité :

Spark

Concernant Spark, sur environnement Linux, il faudra dans un premier temps vérifier que la dernière version de Java soit bien installée sur notre environnement. On devra par la suite télécharger et installer Scala à l’aide des commandes suivantes :

SPARK

On peut par la suite vérifier si Scala est bien installé à l’aide de la commande suivant :

SPARK

Par la suite on peut télécharger et installer Spark via le lien suivant :

spark-2.4.4-bin-hadoop2.7.tgz

L’installation se passe par la suite à l’aide des commandes suivantes :

SPARK

Il faut ensuite ajouter la localisation de spark dans la variable PATH du bashrc de la manière suivante :

SPARK

Puis sourcer le bashrc :

SPARK

Vous avez maintenant Spark qui fonctionne sur votre environnement, vous pouvez le vérifier en initiant le terminal spark :

SPARK

 

Flink

Afin d’installer Flink le seul pré-requis dont vous aurez besoin est une version de Java 8.x.

On peut vérifier la version de Java à l’aide de commande suivante :

FLINT

Ensuite, on peut télécharger l’archive de Flink via le lien suivant. Une fois que l’archive est téléchargée on exécute les commandes suivantes :

FLINK

Afin de vérifier si Flink est bien installé, on peut lancer la commande suivante :

FLINK

 

Exemples de contexte et algorithmes correspondants :

Le but de l’exercice est ici de comparer l’utilisation des deux frameworks dans un contexte de développement précis. Le langage de développement choisi étant Scala.

Ici le but est de traiter chaque événement provenant de Kafka, de calculer la distance euclidienne entre deux évènements et de présenter les résultats sous la forme de tableau Json.  

Un des pré-requis à ce travail est la nécessité de grouper les événements sur une période de temps afin de pouvoir pratiquer des opérations sur ces derniers.

L’opération effectuée, le résultat Json de la transformation est envoyé à un nouveau topic Kafka. 
 

Exemple de transformation avec Flink :

FLINK

 

Exemple de transformation avec Spark :

FLINK

 

Voici le résultat pour deux évènements :

FLINK

 

Après un benchmark de 10 000 événements envoyés sur la même fenêtre de temps, on a calculé le temps total de traitement avec chacun des deux Frameworks et le résultat est le suivant.

  • Temps total avec Spark: 41.50s.

  • Temps total avec Flink: 40,24s.

On voit que dans ce contexte Flink semble un peu plus rapide. A rappeler qu’on est dans un contexte de Streaming. 

 

Récapitulatif :


 

 

Apache Spark

Apache Flink

Définition

Un cluster open source rapide pour du traitement Big Data.

Un cluster open source pour le streaming et le traitement de données.

Préférences

Est d’une manière générale plus souvent utilisé et peut être utilisés avec de nombreux autres projets Apache.

Flink est un framework n’ayant évolué que récemment et est beaucoup moins connu et utilisé.

Confort d’utilisation

Les API Spark sont nombreuses et très faciles à utiliser.

Flink a relativement peu d’API disponibles. 

Plateforme

Peut être lancé à l’aide de gestionnaires de Clusters tiers.

De la même manière Flink peut s'exécuter à l’aide de gestionnaires de Clusters tiers.

Temps d’exécution

Les process tournent 100 fois plus rapidement que Hadoop Map Reduce.

Un peu moins rapide que Spark.

Positionnement 

Open source et est utilisé par de nombreuses entreprises.

Open source et est en train de gagner de plus en plus de popularité ces derniers temps.

Communauté

La communauté autour de Spark est très conséquente et active. Les sujets ouverts sur Github et Stackoverflow sont nombreux.

Flink est un Framework qui séduit de plus en plus avec un fort potentiel. Elle a cependant encore besoin de grandir et n’est pas assez reconnue dans certains secteurs.

Contributeurs

De très gros contributeurs open source. A peu près 1500 contributeurs sur le projet Github.

Le nombre de contributeurs est conséquent, mais 3 fois moins élevés que Spark.

 

 

Partager

Vous aimerez aussi

+
| IT Finance

Micro services … mais pourquoi ?

Les micro-services arrivent à grands pas dans nos architectures et viennent percuter nos organisations et notre mode de travail. Mais au fait, d’où viennent-ils et pourquoi ont-ils autant de succès...
+