Realtime Web avec Kafka, Spark et Mesos

download Realtime Web avec Kafka, Spark et Mesos

of 28

  • date post

    23-Dec-2014
  • Category

    Software

  • view

    2.001
  • download

    3

Embed Size (px)

description

 

Transcript of 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 3. #IaaC Objectifs Spark Streaming Spark Classic Kafka Mesos Scale Up / Scale Out @hayssams 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 Rplication des messages Tolrance 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 Rcupration du Tuple(request, response, session, url) val tuples = kafka.initStream(context, "requests , 2 seconds) Validation des rgles 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 daccs en temps rel Traitement continu des accs utilisateurs @hayssams 9. #IaaC Avec Spark: API unique pour la batch et le streaming Flux continu provevant de rseau 2s 2s 2s 2s 2s 2s 2s t t +16 Dcoupage du flux en un paquet de donnes (RDD) toutes les 2 secondes Un RDD est une collection de donnes 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 excute les oprations sur le RDD comme dans un batch classique et renvoie le rsultat en retour. Spark Excution de microbatchs @hayssams 10. #IaaC Avec Spark: Tolrance aux pannes au cot 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 gnre aucun calcul, juste un graphe dobjets Le Scheduler Spark va soumettre le graphe dobjets aux workers pour excution En cas de panne, il suffit juste de soumettre nouveau le graphe dobjets un autre worker. Pas besoin de rplication des rsultats ou dupstream 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 doprations 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 Contrle sur le partitionnement broadcast accumulateurs Les chanage dactions ne requiert pas dcriture intermdiaire 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 tolrance 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. Rcupration de la localisation des workers 4. sollicitation du service 3. Slection 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 Dmultiplication nombre de VMs Cluster Tomcat : Frontend facing app Cluster Kafka : Middleware de messages Cluster Spark Cluster ElasticSearch TTT : Complxit de configuration Apache Mesos et Marathon la rescousse Voir lensemble des VMs comme une seule machine sur laquelle tournent plusieurs JVMs @hayssams 19. #IaaC Avant Mesos Dmultiplication nombre de VMs Dev.Int.PrProd.Prod. Requiert dexcuter un OS en entier pour obtenir une isolation des ressources et de la scurit Temps de dmarrage assez long (5 10 minutes par VM) Plus dOS => encore plus de systmes administrer Cot 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 Hte OS Guest OS Guest OS Guest App1 App2 App3 OS Hte App1 App2 App3 Isolation CPU Mmoire I/O Rseau 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 Tolrant aux pannes Pour les applications longue dure (MOM / AS) Si vous navez jamais cherch savoir sur quel cur sexcute votre tche alors vous navez probablement pas besoin de savoir non plus sur quel serveur. IaaC : Infrastructure as a (Single) Computer Faire fonctionner les diffrents environnements (dev / Int/ Preprod / Prod) sur la mme infrastructure Y compris les jobs Jenkins @hayssams 22. #IaaC Architecture Mesos Mesos Master Mesos Worker Mesos Worker MonAppScheduler MonAppExecutorMonAppExecutor 2CPUs, 20Go Tche Pour sexcuter sur Mesos une application doit implmenter : 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 davoir dvelopper un Executor et un Scheduler pour les applications longue dure 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 Rgulation de charge et dcouverte GET /apps/MonApp/tasks Hot haproxy.cfg reload @hayssams ["hostname", "UNIQUE", ""], ["hostname", like", front{1,2}"] 26. @YourTwitterHandle#DVXFR14{session hashtag}#IaaC 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 28. @YourTwitterHandle#DVXFR14{session hashtag}#IaaC