Apache Storm - Introduction au traitement temps-réel avec Storm

Preview:

DESCRIPTION

Introduction au traitement temps-réel avec Storm

Citation preview

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/

Recommended