apache storm - introduction au traitement temps-réel avec storm
DESCRIPTION
Introduction au traitement temps-réel avec StormTRANSCRIPT
Benjamin Houdu @benjaminhoudu
Architecte, Zenika
Florian Hussonnois @fhussonnois
Lead Développeur Java, Zenika
Stockage
HDFS• Système BigData et Temps-réel
• Qu’est ce que Storm ?
• Les principaux concepts
• Parallélisme et fiabilité de traitement
• Architecture physique et tolérance à la panne
1
2
3
3
4
Stockage
HDFS
Flic
kr. B
y jo
ne
l han
op
ol
Flic
kr. B
y fd
eco
mit
e
Flic
kr. B
y N
OA
A's
Nat
ion
al O
cean
Se
rvic
e
Données absorbées par le batch Non absorbées
Quelques heuresde données
Vision erronée de la réalité
Données absorbées par le batch Non absorbées
Quelques heuresde données
Capteurs / logs
Cliques web
Transactionsfinancières
1
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
2
1
BatchView
(Map-Reduce)
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
2 3
1
BatchView
(Map-Reduce)
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
Real TimeView
TraitementsAnalyses
4
2 3
1
BatchView
(Map-Reduce)
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
2 3
Real TimeView
TraitementsAnalyses
45
1
BatchView
(Map-Reduce)
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
2 3
Real TimeView
TraitementsAnalyses
45
1
BatchView
(Map-Reduce)
Capteurs / logs
Cliques web
Transactionsfinancières
Data Lake
2 3
Real TimeView
TraitementsAnalyses
45
1
Stockage
HDFS
Créé par Nathan Marz @BackType Analyse en temps réel d'impact sur les réseaux sociaux
Open-source(Twitter) Septembre 2011 Licence Eclipse Public 1.0 V 0.5.2
Evolution rapideIncubateur Apache Septembre 2013
0.9.1 10 Février 2014
0.9.2 25 Juin 2014
0.9.3 - RC 20 Octobre 2014
« Apache Top-Level » projet depuis Septembre 2014
Stockage
HDFSLogs serveurs, clicks, capteurs
Mise à jour continue de bases de données
Paralléliser d’intenses calculs
Traitement au fil de l'eau et en continu de gros volumes de données issues de flux
Traitement au fil de l'eau et en continu de gros volumes de données issues de flux
Plusieurs milliers de workers / clustersParallélisme
Plusieurs milliers de workers / clustersParallélisme
Réassignement automatique des tâches en échecs
Plusieurs milliers de workers / clustersParallélisme
Réassignement automatique des tâches en échecs
Fiabilité de traitement de chaque messageSémantique : au moins une fois & exactement une fois
Plusieurs milliers de workers / clustersParallélisme
Réassignement automatique des tâches en échecs
Fiabilité de traitement de chaque messageSémantique : au moins une fois & exactement une fois
Possibilité d’implémenter la logique de traitement avec n'importe quels langages
Stockage
HDFS
Principale structure de données
Liste de valeurs nommées – typage dynamique
Immuable
Stockage
HDFS
Flux de données
Séquence illimité de tuples
Un flux de données est créé et traité en temps réel de manière distribué.
Tuple Tuple TupleTuple
Stockage
HDFSSource de flux de données.
Se connecte à une source de données externe puis émet des Tuples.
Output streams
Stockage
HDFSSource de flux de données.
Se connecte à une source de données externe puis émet des Tuples.
Output streams Kafka RabbitMQ Kestrel Redis - PublishSubscribe
Stockage
HDFSPrincipaux composants pour manipuler les flux de données.
Encapsulent la logique des traitements à appliquer sur un où plusieurs flux.
Input stream
Flic
kr. B
y ka
vem
an74
3
Stockage
HDFSInput stream
Souscrit à n’importe quels flux devant être: Transformés Filtrés Agrégés
Peut lire / écrire depuis et vers une base de données
Stockage
HDFS Un bolt peut émettre de nouveaux flux.
Input stream
Output streams
Stockage
HDFS Un bolt peut émettre de nouveaux flux.
Input stream
Output streams Kafka HDFS / HBase Cassandra MongoDB Elasticsearch
Stockage
HDFS
Graphe orienté acyclique (DAG) Modélisation d’un Workflow
Les Bolts/Spout s’exécutent en parallèle en tant que tâches.
Une topologie s’exécute indéfiniment.
Les tuples sont distribués aléatoirement et de manière équitable entre les tâches.
Field=A
Field=B
Le flux est partitionné en fonction d’un ou plusieurs champs.
Le flux est répliqué vers l’ensemble des tâches
La totalité du flux est redirigé vers une unique tâche.
Parallélisme = 1
Parallélisme = 4
Parallélisme = 2
Chaque (instance) est exécuté par un exécuteur.
Chaque (thread) s’exécute au sein d’un (JVM).
Parallélisme = 1
Parallélisme = 4
Parallélisme = 2
Storm répartit de manière égale le nombre d’executor à travers les workers.
Parallélisme = 1
Parallélisme = 4
Parallélisme = 2, Tâches = 6
Chaque exécute séquentiellement 3 tâches
Storm garantit que chaque « tuple spout » émis sera traité dans son intégralité par la topologie.
Un tuple peut être ancré avec un ou plusieurs tuples parents.
Un tuple peut ne pas être rattaché à un arbre.
Les bolts informent le système de la réussite du traitement d’un tuple
Les bolts informent le système de l’échec du traitement d’un tuple
Un tuple est automatiquement considéré en échec après un certain lapse de temps.
Timeout à 30 secondes par défaut
Un de par tuple
Un de par tuple
Storm utilise des bolts systèmes (ackers) pour suivre l’état de complétion d’un tuple spout.
Etat de l’arbre de tuples
Le tuple B est ancré au tuple A lorsqu’il est émis.
Etat de l’arbre de tuples
Le bolt transmet l’état de l’arbre à la tâche acker.
Etat de l’arbre de tuples
{A} XOR {A} XOR {B} != 0
Etat de l’arbre de tuples
{A} XOR {A} XOR {B} != 0 {A} XOR {A} XOR {B} XOR {B} = 0
La tâche acker notifie la tâche spoutdu succès du traitement du tuple A.
Etat de l’arbre de tuples
{A} XOR {A} XOR {B} != 0 {A} XOR {A} XOR {B} XOR {B} = 0
ZookeeperQuorum
WorkersWorkers
(Master node)
(Slave node)
Architecture master/slave NSPOF
(Slave node)
ZookeeperQuorum
WorkersWorkers
(Master node)
(Slave node) (Slave node)
Un service centralisé pour maintenir des informations de configuration, fournir une synchronisation distribuée, etc.
Coordonne le cluster Storm
Permet à nimbus de découvrir les Supervisors
ZookeeperQuorum
WorkersWorkers
(Master node)
(Slave node) (Slave node)
Distribue le code à travers le cluster
Assigne les tâches
Traite les erreurs et réassigne les tâches en conséquence
ZookeeperQuorum
(Master node)
(Slave node) (Slave node)
$ /bin/storm jar
Nimbus calcule les assignements des tâches et les envoie à Zookeeper.
Les supervisors sont notifiés via Zookeeper.
Chaque supervisor récupère le code depuis nimbus (Thrift)
1
2
3
1
23
ZookeeperQuorum
WorkersWorkers
(Master node)
(Slave node) (Slave node)
Les supervisors démarrent le nombre de workers nécessaires à l’exécution de la topologie
4
4
ZookeeperQuorum
WorkersWorkers
(Master node)
(Slave node) (Slave node)
WorkerLe supervisor redémarre le worker.Nimbus peut réassigner les tâches.
SupervisorNimbus réassigne les tâches.
NimbusLes topologies continuent de fonctionner.Les ré-assignements sont impossibles.
Heartbeat
Stockage
HDFS Framework au dessus de Storm
Orienté micro-batch
Sémantique « exactement une fois »
(Distributed Remote Procedure Call)
Paralléliser des calculs intenses
Topologie coordonnée via une serveur DRPC
Documentation officielle: http://storm.apache.org
Mailing liste
Storm Blueprints: Patterns for Distributed Real-time Computation
P. Taylor Goetz, Brian O’Neil
Big Data - Principles and best practices of scalable realtime data systems,
Nathan Marz and James Warren
http://www.meetup.com/Paris-Storm-User-Group/