SlideShare uma empresa Scribd logo
1 de 28
#IaaC
Realtime Web avec Kafka, Spark
et Mesos
@hayssams
Hayssam Saleh
Restreinte à la section de mon intervention
#IaaC
Sommaire
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,
…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
Mesos
MarathonZookeeper
Server 1 Server 2Leader
#IaaC
Objectifs
Spark Streaming
Spark Classic
Kafka
Mesos
Scale Up / Scale Out
@hayssams
#IaaC
Pourquoi Kafka ?
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,
…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
MarathonZookeeper
Server 1 Server 2Leader
@hayssams
#IaaC
Avant les messages groups
U2E3 U1E3 U2E2 U1E2 U2E1
• Solution traditionnelle : Un seul consommateur pour toute la file
U1E1U2E3 U1E3 U2E2 U1E2 U2E1
U1E1
@hayssams
#IaaC
Avec Kafka : partitionnement par clef
U2E3 U2E2 U2E1
U1E3 U1E2 U1E1
U2E3 U2E2 U2E1U1E3 U1E2 U1E1
Cluster Kafka
P1R1 P2R1
P1R2 P2R2
Pr
o
Con
s
Con
s
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
#IaaC
Pourquoi Spark Streaming
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,
…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
MarathonZookeeper
Server 1 Server 2Leader
@hayssams
#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
#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
#IaaC
Avec Spark: Tolérance aux pannes au coût minimum
val 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
KafkaInputDStrea
m
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
#IaaC
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,
…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
MarathonZookeeper
Server 1 Server 2Leader
Pourquoi Spark Classic
@hayssams
#IaaC
Notification des clients
rdd= 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
#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 groupByKey
reduceByKey
reduce
collect
count
take
first
foreach
…
• 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
#IaaC
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,
…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
MarathonZookeeper
Server 1 Server 2Leader
Pourquoi Apache Zookeeper
@hayssams
#IaaC
Pourquoi Zookeeper
•Election de leader pour la tolérance au pannes
Maitre
EsclaveEsclaveEsclave
Maitre de secours
Esclave et maitre de secours
Esclave et maitre de secours
Esclave et maitre de secours
Esclave et maitre de secours
Election de leader
Avec Zookeeper
Tout noeud est un master potentiel
@hayssams
#IaaC
Pourquoi Zookeeper
•Centralisation de la configuration
/
services
…
master
nodes
es
node1
node2
node1
Zookeeper
Server 1 Server 2Leader
Service
Service
1.Enregistrementdesservices
Client
2. Récupération de la localisation des workers
4. sollicitation du service
3. Sélection du worker
@hayssams
#IaaC
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
Zookeeper
Server 1 Server 2Leader
Pourquoi Mesos
Marathon
@hayssams
#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
#IaaC
Avant Mesos Démultiplication nombre de VMs
Dev.Int.PréProd.Prod.
• 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
#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
#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
#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
#IaaC
Mesos
TomcatTomcat
Frontfacing
App
Frontfacing
App
Akk
a
Akk
a
Akk
a
Akk
a
Stream Processing
(Spark Streaming)
Realtime Views
(ElasticSearch)
All Data
(Spark)
Precompute
Views
Batch Views
Query
(Tomcat,Kibana,…)
NewDataStream
Kafka
Speed Layer
Batch Layer Serving Layer
Product
Updates
MarathonZookeeper
Server 1 Server 2Leader
Marathon
@hayssams
#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
#IaaC
Exemple de commande Marathon
POST /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}"]
@YourTwitterHandle#DVXFR14{session hashtag}#IaaC
#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
@YourTwitterHandle#DVXFR14{session hashtag}#IaaC

Mais conteúdo relacionado

Mais procurados

Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comStockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comDamien Krotkine
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs javaJérémy Sevellec
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostAlexander DEJANOVSKI
 
Spark Streaming
Spark StreamingSpark Streaming
Spark StreamingPALO IT
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache ZookeeperMichaël Morello
 
Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Louis Jacomet
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Modern Data Stack France
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorFlorian Beaufumé
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandraDuyhai Doan
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage GoSylvain Wallez
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à CassandraVMware Tanzu
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerJean-Baptiste Claramonte
 
Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en JavaFlorian Beaufumé
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Duyhai Doan
 

Mais procurados (20)

Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comStockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs java
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
 
REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 
Big Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez ChronopostBig Data Paris 2015 - Cassandra chez Chronopost
Big Data Paris 2015 - Cassandra chez Chronopost
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3Caching reboot: javax.cache & Ehcache 3
Caching reboot: javax.cache & Ehcache 3
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et Reactor
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 
Introduction au langage Go
Introduction au langage GoIntroduction au langage Go
Introduction au langage Go
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en Java
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 

Destaque

Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimizationebiznext
 
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsPSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsStephane Manciot
 
Machine Learning - Spark / MLlib
Machine Learning - Spark / MLlibMachine Learning - Spark / MLlib
Machine Learning - Spark / MLlibebiznext
 
Machine learning
Machine learningMachine learning
Machine learningebiznext
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreStephane Manciot
 
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Stephane Manciot
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQLebiznext
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013Stephane Manciot
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosebiznext
 
Fundamentals of Managing the Data Center Life Cycle for Owners
Fundamentals of Managing the Data Center Life Cycle for OwnersFundamentals of Managing the Data Center Life Cycle for Owners
Fundamentals of Managing the Data Center Life Cycle for OwnersSchneider Electric
 
DeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence ApplicationsDeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence ApplicationsRevolution Analytics
 
Research Data Management
Research Data ManagementResearch Data Management
Research Data ManagementJamie Bisset
 
ApacheCon-Flume-Kafka-2016
ApacheCon-Flume-Kafka-2016ApacheCon-Flume-Kafka-2016
ApacheCon-Flume-Kafka-2016Jayesh Thakrar
 
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?OCTO Technology Suisse
 
Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Antidot
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonIgor Anishchenko
 

Destaque (20)

Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimization
 
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsPSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
 
Machine Learning - Spark / MLlib
Machine Learning - Spark / MLlibMachine Learning - Spark / MLlib
Machine Learning - Spark / MLlib
 
Machine learning
Machine learningMachine learning
Machine learning
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvre
 
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
 
JahiaOne - Performance Tuning
JahiaOne - Performance TuningJahiaOne - Performance Tuning
JahiaOne - Performance Tuning
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macros
 
Fundamentals of Managing the Data Center Life Cycle for Owners
Fundamentals of Managing the Data Center Life Cycle for OwnersFundamentals of Managing the Data Center Life Cycle for Owners
Fundamentals of Managing the Data Center Life Cycle for Owners
 
DeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence ApplicationsDeployR: Revolution R Enterprise with Business Intelligence Applications
DeployR: Revolution R Enterprise with Business Intelligence Applications
 
Research Data Management
Research Data ManagementResearch Data Management
Research Data Management
 
3 apache-avro
3 apache-avro3 apache-avro
3 apache-avro
 
ApacheCon-Flume-Kafka-2016
ApacheCon-Flume-Kafka-2016ApacheCon-Flume-Kafka-2016
ApacheCon-Flume-Kafka-2016
 
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
Qu'est qu'une Data Driven Company à l'heure de la digitalisation ?
 
Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased Comparison
 
Data Science
Data ScienceData Science
Data Science
 

Semelhante a Realtime Web avec Kafka, Spark et Mesos

Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Ippon
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Cartographie du big data
Cartographie du big dataCartographie du big data
Cartographie du big dataacogoluegnes
 
Datastax Cassandra + Spark Streaming
Datastax Cassandra + Spark StreamingDatastax Cassandra + Spark Streaming
Datastax Cassandra + Spark StreamingVictor Coustenoble
 
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauPublicis Sapient Engineering
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribuesLê Anh
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - GenèveaOS Community
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apacheafup Paris
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsNeil Armstrong
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Bruno Bonnin
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormParis_Storm_UG
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlCodizy
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...Publicis Sapient Engineering
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs rubypinguin666
 

Semelhante a Realtime Web avec Kafka, Spark et Mesos (20)

Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Cartographie du big data
Cartographie du big dataCartographie du big data
Cartographie du big data
 
Datastax Cassandra + Spark Streaming
Datastax Cassandra + Spark StreamingDatastax Cassandra + Spark Streaming
Datastax Cassandra + Spark Streaming
 
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim RousseauXebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau
 
Presentation des outils traitements distribues
Presentation des outils traitements distribuesPresentation des outils traitements distribues
Presentation des outils traitements distribues
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server Internals
 
Formation Google App Engine
Formation Google App EngineFormation Google App Engine
Formation Google App Engine
 
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
Guide (un tout petit peu) pratique (et totalement subjectif) du stream proces...
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...XebiCon'16 : WeScale - DNS as a Service, the OpenStack way.  Par Pascal Edoua...
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs ruby
 

Realtime Web avec Kafka, Spark et Mesos

  • 1. #IaaC Realtime Web avec Kafka, Spark et Mesos @hayssams Hayssam Saleh Restreinte à la section de mon intervention
  • 2. #IaaC Sommaire TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana, …) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Mesos MarathonZookeeper Server 1 Server 2Leader
  • 4. #IaaC Pourquoi Kafka ? Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana, …) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates MarathonZookeeper Server 1 Server 2Leader @hayssams
  • 5. #IaaC Avant les messages groups U2E3 U1E3 U2E2 U1E2 U2E1 • Solution traditionnelle : Un seul consommateur pour toute la file U1E1U2E3 U1E3 U2E2 U1E2 U2E1 U1E1 @hayssams
  • 6. #IaaC Avec Kafka : partitionnement par clef U2E3 U2E2 U2E1 U1E3 U1E2 U1E1 U2E3 U2E2 U2E1U1E3 U1E2 U1E1 Cluster Kafka P1R1 P2R1 P1R2 P2R2 Pr o Con s Con s 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
  • 7. #IaaC Pourquoi Spark Streaming Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana, …) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates MarathonZookeeper Server 1 Server 2Leader @hayssams
  • 8. #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
  • 9. #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
  • 10. #IaaC Avec Spark: Tolérance aux pannes au coût minimum val 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 KafkaInputDStrea m 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
  • 11. #IaaC Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana, …) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates MarathonZookeeper Server 1 Server 2Leader Pourquoi Spark Classic @hayssams
  • 12. #IaaC Notification des clients rdd= 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
  • 13. #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 groupByKey reduceByKey reduce collect count take first foreach … • 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
  • 14. #IaaC Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana, …) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates MarathonZookeeper Server 1 Server 2Leader Pourquoi Apache Zookeeper @hayssams
  • 15. #IaaC Pourquoi Zookeeper •Election de leader pour la tolérance au pannes Maitre EsclaveEsclaveEsclave Maitre de secours Esclave et maitre de secours Esclave et maitre de secours Esclave et maitre de secours Esclave et maitre de secours Election de leader Avec Zookeeper Tout noeud est un master potentiel @hayssams
  • 16. #IaaC Pourquoi Zookeeper •Centralisation de la configuration / services … master nodes es node1 node2 node1 Zookeeper Server 1 Server 2Leader Service Service 1.Enregistrementdesservices Client 2. Récupération de la localisation des workers 4. sollicitation du service 3. Sélection du worker @hayssams
  • 17. #IaaC Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates Zookeeper Server 1 Server 2Leader Pourquoi Mesos Marathon @hayssams
  • 18. #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
  • 19. #IaaC Avant Mesos Démultiplication nombre de VMs Dev.Int.PréProd.Prod. • 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
  • 20. #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
  • 21. #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
  • 22. #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
  • 23. #IaaC Mesos TomcatTomcat Frontfacing App Frontfacing App Akk a Akk a Akk a Akk a Stream Processing (Spark Streaming) Realtime Views (ElasticSearch) All Data (Spark) Precompute Views Batch Views Query (Tomcat,Kibana,…) NewDataStream Kafka Speed Layer Batch Layer Serving Layer Product Updates MarathonZookeeper Server 1 Server 2Leader Marathon @hayssams
  • 24. #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
  • 25. #IaaC Exemple de commande Marathon POST /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}"]
  • 27. #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