SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Stream Processing en mémoire avec HazelCast Jet
Claire Villard
neur0nia
leneurone/hz-jet
1 / 14
Claire Villard
Développeuse Java depuis 2011
Société V3D
Travaille avec HazelCast IMDG depuis 2 ans
Membre de Duchess France
Organisatrice du LyonJUG
2 / 14
Qu'est-ce qu'HazelCast IMDG ?
IMDG = In-Memory Data Grid, Grille de données en mémoire
Stockage distribué de structures de données (Map, List, AtomicLong, ...)
Calcul distribué sur ces structures
Clustering
Java-based
Open-source
3 / 14
Qu'est-ce qu'HazelCast Jet ?
Solution de stream et batch processing basée sur HazelCast IMDG
Sauf mention contraire, les schémas proviennent de https://jet.hazelcast.org/
4 / 14
Modélisation
Utilise les graphes orientés acycliques (DAG, Directed Acyclic Graphs)
5 / 14
Fonctionnalités
Nombreuses entrées / sorties
Faible latence
Contrôle du débit
Support des traitements batchs comme des streams finis
Sliding windows
Facilement extensible
En v0.5 :
Tolérance aux crashs de noeuds avec redémarrage des jobs
Garantie de traitement "au moins 1", "exactement 1" ou "au mieux" des messages
6 / 14
Roadmap
Déjà annoncé production-ready
v0.4 sortie le 14 juin 2017
Release 0.5 : octobre 2017
1.0 : prévue début 2018
APIs instables jusqu'à la v1.0
7 / 14
En pratique
8 / 14
DAG
DAG dag = new DAG();
// Création des noeuds de traitement
Vertex source = dag.newVertex("source", Sources.readMap("inputMap"));
Vertex enricher = dag.newVertex("enricher", MetricEnricher::new);
Vertex output = dag.newVertex("output", Sinks.writeMap("outputMap"));
Vertex errorOutput = dag.newVertex("errorOutput", Sinks.writeMap("errorOutputMap"));
// Création des arêtes du graphe entre les noeuds
dag
.edge(Edge.between(source, enricher))
.edge(Edge.from(enricher, 0).to(output))
.edge(Edge.from(enricher, 1).to(errorOutput));
// Démarrage de Jet
JetInstance jet = Jet.newJetInstance();
// Démarrage du Job et attente du résultat
jet.newJob(dag).execute().get();
9 / 14
Processor
public class MetricEnricher extends AbstractProcessor {
private IMap<Integer, Customer> customerMap; // IMap des Customers
@Override
protected void init(@Nonnull Context context) throws Exception {
// Utilisation de l'instance HazelCast sous-jacente
customerMap = context.jetInstance().getHazelcastInstance().getMap("customers");
}
@Override
protected boolean tryProcess0(@Nonnull Object item) throws Exception {
Metric metric = (Metric) item;
// On tente de trouver le customer associé à la métrique dans une IMap
Customer customer = customerMap.get(metric.getCustomerId());
// On choisit l'arête du graphe à utiliser
if (customer != null) {
return tryEmit(0, new EnrichedMetric(metric, customer));
} else {
return tryEmit(1, metric);
}
}
}
10 / 14
Stream Processing
public class QueuePoller extends AbstractProcessor {
private IQueue<Metric> inputQueue; // Queue d'entrée
@Override
protected void init(@Nonnull Context context) throws Exception {
inputQueue = context.jetInstance().getHazelcastInstance().getQueue("inputQueue");
}
// Utilisation d'un thread dédié obligatoire car poll(int, TimeUnit) est bloquante
public QueuePoller() { setCooperative(false); }
@Override
public boolean complete() {
try {
Metric metric = inputQueue.poll(20, TimeUnit.MILLISECONDS);
if(metric != null) {
tryEmit(metric);
}
return false; // execution infinie tant que complete() retourne false
} catch (Exception e) {
return true; // arrêt de l'exécution
}
}
}
11 / 14
Performances
Intel® Core™ i7-5600U CPU @ 2.60GHz × 4
16Go RAM
Fedora 26 64 bits
JVM Oracle HotSpot 1.8.0_121
Configuration de Jet par défaut, 2 noeuds locaux
Batch processing - 1 million de Metric
Temps moyen d'exécution du Job : 22s, soit environ 45 400 items / seconde
Stream processing
Injection de Metric dans la queue et calcul de la latence totale
Latence moyenne : 2 ms, latence max. sur 100 000 éléments : 27 ms
12 / 14
Limitations
Qualité de la documentation...
Pas de typage des entrées, sorties, ou arêtes entre noeuds, tout est Object.
13 / 14
Merci !
leneurone/hz-jet
14 / 14

Weitere ähnliche Inhalte

Was ist angesagt?

Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 

Was ist angesagt? (7)

Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 

Ähnlich wie Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensionswyggio
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
12-Concurrence-Rendez-vous.pdf
12-Concurrence-Rendez-vous.pdf12-Concurrence-Rendez-vous.pdf
12-Concurrence-Rendez-vous.pdfPatiento Del Mar
 
programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java Ezéquiel Tsagué
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptRaphaël Semeteys
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 

Ähnlich wie Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD (20)

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
threads.pdf
threads.pdfthreads.pdf
threads.pdf
 
Wygday 2011 - C#5 Async CTP - Reactive Extensions
Wygday 2011  - C#5 Async CTP - Reactive ExtensionsWygday 2011  - C#5 Async CTP - Reactive Extensions
Wygday 2011 - C#5 Async CTP - Reactive Extensions
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Vert.x
Vert.xVert.x
Vert.x
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Jdbc
JdbcJdbc
Jdbc
 
12-Concurrence-Rendez-vous.pdf
12-Concurrence-Rendez-vous.pdf12-Concurrence-Rendez-vous.pdf
12-Concurrence-Rendez-vous.pdf
 
Reseau
ReseauReseau
Reseau
 
programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java
 
Solution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScriptSolution Linux 2009 - JavaScript
Solution Linux 2009 - JavaScript
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 

Mehr von La Cuisine du Web

Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...
Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...
Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...La Cuisine du Web
 
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...La Cuisine du Web
 
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...La Cuisine du Web
 
Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONTour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONLa Cuisine du Web
 
Programming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERProgramming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERLa Cuisine du Web
 
La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La Cuisine du Web
 
Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNELa Cuisine du Web
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSLa Cuisine du Web
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDLa Cuisine du Web
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETLa Cuisine du Web
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELLa Cuisine du Web
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNLa Cuisine du Web
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMELa Cuisine du Web
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...La Cuisine du Web
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...La Cuisine du Web
 
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYAudio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYLa Cuisine du Web
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIALa Cuisine du Web
 
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...La Cuisine du Web
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETLa Cuisine du Web
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...La Cuisine du Web
 

Mehr von La Cuisine du Web (20)

Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...
Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...
Kit de survie du marketeur au bois dormant – Digitalisation du marketing par ...
 
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...
Objets connectés : adapter la technologie aux usages, et pas l’inverse ! par ...
 
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...
Manager l’innovation : est-ce contradictoire, pertinent, nécessaire ?… par Ma...
 
Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONTour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
 
Programming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERProgramming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGER
 
La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...
 
Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNE
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUS
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARD
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANET
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDEL
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMME
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
 
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYAudio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIA
 
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSET
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
 

Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD

  • 1. Stream Processing en mémoire avec HazelCast Jet Claire Villard neur0nia leneurone/hz-jet 1 / 14
  • 2. Claire Villard Développeuse Java depuis 2011 Société V3D Travaille avec HazelCast IMDG depuis 2 ans Membre de Duchess France Organisatrice du LyonJUG 2 / 14
  • 3. Qu'est-ce qu'HazelCast IMDG ? IMDG = In-Memory Data Grid, Grille de données en mémoire Stockage distribué de structures de données (Map, List, AtomicLong, ...) Calcul distribué sur ces structures Clustering Java-based Open-source 3 / 14
  • 4. Qu'est-ce qu'HazelCast Jet ? Solution de stream et batch processing basée sur HazelCast IMDG Sauf mention contraire, les schémas proviennent de https://jet.hazelcast.org/ 4 / 14
  • 5. Modélisation Utilise les graphes orientés acycliques (DAG, Directed Acyclic Graphs) 5 / 14
  • 6. Fonctionnalités Nombreuses entrées / sorties Faible latence Contrôle du débit Support des traitements batchs comme des streams finis Sliding windows Facilement extensible En v0.5 : Tolérance aux crashs de noeuds avec redémarrage des jobs Garantie de traitement "au moins 1", "exactement 1" ou "au mieux" des messages 6 / 14
  • 7. Roadmap Déjà annoncé production-ready v0.4 sortie le 14 juin 2017 Release 0.5 : octobre 2017 1.0 : prévue début 2018 APIs instables jusqu'à la v1.0 7 / 14
  • 9. DAG DAG dag = new DAG(); // Création des noeuds de traitement Vertex source = dag.newVertex("source", Sources.readMap("inputMap")); Vertex enricher = dag.newVertex("enricher", MetricEnricher::new); Vertex output = dag.newVertex("output", Sinks.writeMap("outputMap")); Vertex errorOutput = dag.newVertex("errorOutput", Sinks.writeMap("errorOutputMap")); // Création des arêtes du graphe entre les noeuds dag .edge(Edge.between(source, enricher)) .edge(Edge.from(enricher, 0).to(output)) .edge(Edge.from(enricher, 1).to(errorOutput)); // Démarrage de Jet JetInstance jet = Jet.newJetInstance(); // Démarrage du Job et attente du résultat jet.newJob(dag).execute().get(); 9 / 14
  • 10. Processor public class MetricEnricher extends AbstractProcessor { private IMap<Integer, Customer> customerMap; // IMap des Customers @Override protected void init(@Nonnull Context context) throws Exception { // Utilisation de l'instance HazelCast sous-jacente customerMap = context.jetInstance().getHazelcastInstance().getMap("customers"); } @Override protected boolean tryProcess0(@Nonnull Object item) throws Exception { Metric metric = (Metric) item; // On tente de trouver le customer associé à la métrique dans une IMap Customer customer = customerMap.get(metric.getCustomerId()); // On choisit l'arête du graphe à utiliser if (customer != null) { return tryEmit(0, new EnrichedMetric(metric, customer)); } else { return tryEmit(1, metric); } } } 10 / 14
  • 11. Stream Processing public class QueuePoller extends AbstractProcessor { private IQueue<Metric> inputQueue; // Queue d'entrée @Override protected void init(@Nonnull Context context) throws Exception { inputQueue = context.jetInstance().getHazelcastInstance().getQueue("inputQueue"); } // Utilisation d'un thread dédié obligatoire car poll(int, TimeUnit) est bloquante public QueuePoller() { setCooperative(false); } @Override public boolean complete() { try { Metric metric = inputQueue.poll(20, TimeUnit.MILLISECONDS); if(metric != null) { tryEmit(metric); } return false; // execution infinie tant que complete() retourne false } catch (Exception e) { return true; // arrêt de l'exécution } } } 11 / 14
  • 12. Performances Intel® Core™ i7-5600U CPU @ 2.60GHz × 4 16Go RAM Fedora 26 64 bits JVM Oracle HotSpot 1.8.0_121 Configuration de Jet par défaut, 2 noeuds locaux Batch processing - 1 million de Metric Temps moyen d'exécution du Job : 22s, soit environ 45 400 items / seconde Stream processing Injection de Metric dans la queue et calcul de la latence totale Latence moyenne : 2 ms, latence max. sur 100 000 éléments : 27 ms 12 / 14
  • 13. Limitations Qualité de la documentation... Pas de typage des entrées, sorties, ou arêtes entre noeuds, tout est Object. 13 / 14