+ All Categories
Home > Software > Realtime Web avec Kafka, Spark et Mesos

Realtime Web avec Kafka, Spark et Mesos

Date post: 23-Dec-2014
Category:
Upload: ebiznext
View: 2,005 times
Download: 3 times
Share this document with a friend
Description:
 
Popular Tags:
28
#IaaC Realtime Web avec Kafka, Spark et Mesos @hayssams Hayssam Saleh Restreinte à la section de mon intervention
Transcript
Page 1: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Realtime Web avec Kafka, Spark et Mesos

@hayssams

Hayssam SalehRestreinte à la section de mon intervention

Page 2: Realtime Web avec Kafka, Spark et Mesos

#IaaC

SommaireTo

mca

tTo

mca

t

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

Mesos

MarathonZookeeper

Server 1 Server 2Leader

Page 3: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Objectifs

Spark Streaming

Spark Classic

Kafka

Mesos

Scale Up / Scale Out

@hayssams

Page 4: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Pourquoi Kafka ?

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

MarathonZookeeper

Server 1 Server 2Leader

@hayssams

Page 5: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avant les messages groups

U2E3

U1E3

U2E2

U1E2

U2E1

• Solution traditionnelle : Un seul consommateur pour toute la file

U1E1

U2E3

U1E3

U2E2

U1E2

U2E1

U1E1

@hayssams

Page 6: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Kafka : partitionnement par clef

U2E3

U2E2

U2E1

U1E3

U1E2

U1E1 U2E

3U2E

2U2E

1U1E

3U1E

2U1E

1

Cluster Kafka

P1R1

P2R1

P1R2

P2R2

Pro

Cons

Cons

Avec JMSGroupID

• Un local manager (SPOF) plusieurs remote

• Requiert un serveur de backup

@hayssams

Avec Kafka

• Support natif du partitionnement

• Réplication des messages

• Tolérance au pannes

Page 7: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Pourquoi Spark Streaming

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

MarathonZookeeper

Server 1 Server 2Leader

@hayssams

Page 8: Realtime Web avec Kafka, Spark et Mesos

#IaaC

• Récupération du Tuple(request, response, session, url)

• val tuples = kafka.initStream(context, "requests », 2 seconds)

• Validation des règles

• rdd = tuples.filter( t => RulesHandler.match(t))

• Transformation du tuple en document JSON

• rdd2 = rdd.map( t => toDocument)

• Injection dans ES

• rdd2.foreachRDD(doc => es.insert doc)

• Identification des relations

• rdd3 = rdd.flatMap(_.toRelations)

• rdd3.foreachRDD(rel => neo4j.insert rel)

=> Statistiques d’accès en temps réel

Traitement continu des accès utilisateurs

@hayssams

Page 9: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Spark: API unique pour la batch et le streaming

Flux continu provevant de réseau

2s 2s 2s 2s 2s 2s 2s

t t +16

• Découpage du flux en un paquet de données (RDD) toutes les 2 secondes

• Un RDD est une collection de données

RDD RDD RDD RDD RDD RDD RDD• Chaque paquet est traité comme un

comme un RDD soumis au batch Spark classique

Out Out Out Out

D

Out

D

Out Out

• Spark exécute les opérations sur le RDD comme dans un batch classique et renvoie le résultat en retour.

Spark• Exécution de microbatchs

@hayssams

Page 10: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Spark: Tolérance aux pannes au coût minimumval tuples = kafka.initStream(context,"requests », 2 seconds

rdd = tuples.filter( t => RulesHandler.match(t))

rdd2 = rdd.map( t => toDocument)

rdd2.foreachRDD(doc => es.insert doc) // via Kafka

rdd3 = rdd.flatMap(_.toRelations)

rdd3.foreachRDD(rel => neo4j.insert rel) // via Kafka

KafkaInputDStream

FilteredDStream

MappedDStream

ForEachDStream

MappedDStream

ForEachDStream

• Le code ci-dessus ne génère aucun calcul, juste un graphe d’objets

• Le Scheduler Spark va soumettre le graphe d’objets aux workers pour exécution

• En cas de panne, il suffit juste de soumettre à nouveau le graphe d’objets à un autre worker.

• Pas besoin de réplication des résultats ou d’upstream backup

@hayssams

Page 11: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

MarathonZookeeper

Server 1 Server 2Leader

Pourquoi Spark Classic

@hayssams

Page 12: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Notification des clientsrdd= Sc.readFromXMLFile(…)

rdd.persist

val updatedRDD = rdd.filter(product => product.existsInMapWithDifferentHash)

val newRDD = rdd.filter(product => !product.existInMap)

val updateNotifications = updatedRDD.map(_.executeStrategies)

val newNotifications = newRDD.map(_.executeStrategies)

updateNotifications.union(newNotifications).foreachRDD(_.notifyClient)

RDD

Action

@hayssams

Page 13: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Spark : Une riche librairie d’opérations

d1

d2

d3

d1

d2

d3

d1

d2

d3

d2

d3

d1

d2

d3

d1

d2

d3

d1

d2

d3

map filter union groupByKeyreduceByKey

reducecollectcounttakefirstforeach…

• Avec en plus

• Contrôle sur le partitionnement

• broadcast

• accumulateurs

• Les chaînage d’actions ne requiert pas d’écriture intermédiaire sur disque

@hayssams

Page 14: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

MarathonZookeeper

Server 1 Server 2Leader

Pourquoi Apache Zookeeper

@hayssams

Page 15: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Pourquoi Zookeeper

• Election de leader pour la tolérance au pannes

Maitre

EsclaveEsclaveEsclave

Maitre de secoursEsclave et maitre de secours

Esclave et maitre de secours

Esclave et maitre de secours

Esclave et maitre de secours

Election de leader

Avec ZookeeperTout noeud est un master potentiel

@hayssams

Page 16: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Pourquoi Zookeeper• Centralisation de la configuration

/

services

master

nodes

es

node1

node2

node1

Zookeeper

Server 1 Server 2Leader

Service

Service

1.

Enre

gis

trem

en

t des

serv

ices

Client

2. Récupération de la localisation des workers

4. sollicitation du service

3. Sélection du worker

@hayssams

Page 17: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana,

…)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

Zookeeper

Server 1 Server 2Leader

Pourquoi MesosMarathon

@hayssams

Page 18: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avant Mesos Démultiplication nombre de VMs• €€€ Cluster Tomcat : Frontend facing app

• € Cluster Kafka : Middleware de messages

• €€ Cluster Spark

• €€€ Cluster ElasticSearch

• TTT : Compléxité de configuration

• Apache Mesos et Marathon à la rescousse

• Voir l’ensemble des VMs comme une seule machine sur laquelle tournent plusieurs JVMs

@hayssams

Page 19: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avant Mesos Démultiplication nombre de VMs

Dev.

Int.

Pré

Pro

d.

Pro

d.

• Requiert d’exécuter un OS en entier pour obtenir une isolation des ressources et de la sécurité

• Temps de démarrage assez long (5 à 10 minutes par VM)

• Plus d’OS => encore plus de systèmes à administrer

• Coût de licence des VMs

• Allocation statique => Sous utilisation de la CPU

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

VM

@hayssams

Page 20: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Linux cgroups

OS Hôte

OS Guest

OS Guest

OS Guest

App1 App2 App3

OS Hôte

App1 App2 App3• Isolation

• CPU

• Mémoire

• I/O

• Réseau

VM Linux cgroups

@hayssams

Page 21: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Avec Mesos

Serveur Serveur ServeurServeur

80 CPU, 640Go

App

App

App

App

App

App

App

AppApp

• Partage des ressources

• Tolérant aux pannes

• Pour les applications longue durée (MOM / AS)

• Si vous n’avez jamais cherché à savoir sur quel cœur s’exécute votre tâche alors vous n’avez probablement pas besoin de savoir non plus sur quel serveur.

• IaaC : Infrastructure as a (Single) Computer

• Faire fonctionner les différents environnements (dev / Int/ Preprod / Prod) sur la même infrastructure

• Y compris les jobs Jenkins

@hayssams

Page 22: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Architecture Mesos

Mesos Master

Mesos Worker Mesos Worker

MonAppScheduler

MonAppExecutorMonAppExecutor

2CPUs, 20Go

Tâche

• Pour s’exécuter sur Mesos une application doit implémenter :

• Un scheduler

• Un Executor

@hayssams

Page 23: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Mesos

Tom

cat

Tom

cat

Fron

t fa

cin

g

Ap

pFr

on

t fa

cin

g

Ap

p

AkkaAkka

AkkaAkka

Stream Processing

(Spark Streaming)

Realtime Views(ElasticSearch)

All Data(Spark)

PrecomputeViews

Batch Views

Qu

ery

(Tom

cat, K

ibana, …

)

New

Data

S

tream

Kafka

Speed Layer

Batch Layer Serving Layer

Product Updates

MarathonZookeeper

Server 1 Server 2Leader

Marathon

@hayssams

Page 24: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Pourquoi Marathon

• Eviter d’avoir à développer un Executor et un Scheduler pour les applications « longue durée »

• Marathon permet via une API REST de configurer des instances applicatives au dessus de Mesos en indiquant la commande à lancer

@hayssams

Page 25: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Exemple de commande MarathonPOST /v2/apps HTTP/1.1

{ "id": "TomcatApp", "cmd": "/path/bin/catalina.sh run $PORT", "mem": 1024, "cpus": 2.0, "instances": 3, "constraints": [

]}

• Marathon utilisé pour lancer

• Kafka

• ElasticSearch

• Tomcat

• Scale up/down par simple appel REST avec une nouvelle configuration

Régulation de charge et découverte

GET /apps/MonApp/tasks Hot haproxy.cfg reload

@hayssams

["hostname", "UNIQUE", ""],

["hostname", ”like", ”front{1,2}"]

Page 26: Realtime Web avec Kafka, Spark et Mesos

@YourTwitterHandle#DVXFR14{session hashtag}#IaaC

Sum

mar

y

Page 27: Realtime Web avec Kafka, Spark et Mesos

#IaaC

Conclusion• Neal Real time Analytics

• Batch Analytics

• Middleware de messages

• Partage dynamique de ressources

Spark Streaming

Spark Classic

Mesos

Marathon

Kafka

Un seul framework

IaaC

Partionnement automatique

@hayssams

Page 28: Realtime Web avec Kafka, Spark et Mesos

@YourTwitterHandle#DVXFR14{session hashtag}#IaaC

Q & A


Recommended