SlideShare une entreprise Scribd logo
Introduction à Apache Pulsar
Bruno Bonnin
Meetup #ParisDataEng - 20 juin 2019
Directeur technique @ Zenika Nantes
 Introduction à Apache Pulsar
Pulsar, un système de messagerie distribué
Né chez Yahoo ! pour compenser certaines
limites des solutions de l’époque
Pour des apps critiques comme Yahoo Mail,
Yahoo Finance, Yahoo Sports, etc
Open sourcé en 2016
Devenu Top Level Project de la
fondation Apache en sept 2018
Premier déploiement Q2 2015
Pulsar, un système de messagerie distribué
Données répliquées et
enregistrées sur disque
Garantie d’ordre des messages
Réplication géographique
des données
Multi-entité (tenant)
Fort débit / Faible latence
Garantie de livraison
Hautement scalable
Concepts & architecture
Des producteurs,
des consommateurs,
des topics, ...
Topic 1
Producteur Consommateur
Topic 2
Topic 3
Gestion des messages
Producteurs
Stockage des messages
Bookie 1
Bookie 2
Bookie 3
Bookie 4
Consommateurs
zkServer 1 zkServer 2 zkServer 3
Broker 1
Broker 2 Broker 3
lecture
stockage
meta-données
coordination clusters
stockage
meta-données
stockage des
données
Des brokers, des bookies, ...
écriture
Apache BookKeeper
Apache Zookeeper
Bookie 1
Une architecture scalable
Broker 1
Broker 2
Bookie 2 Bookie 3 Bookie 4
Gestion des
messages
Stockage des
messages
Producteurs Consommateurs
Broker 3
Bookie 5
Topic 1
 Introduction à Apache Pulsar
Apache BookKeeper
Système de stockage scalable,
tolérant aux pannes et à faible latence
Conçu à l’origine comme une solution pour
la haute disponibilité du NameNode de
HDFS (WAL)
Avec Pulsar: stockage des données et des
offsets (cursors)
Broker
Topic 1
segment 2segment 1 segment x...
Bookie 1
segment 1
Une architecture hautement disponible
segment 1 segment 1
segment x
segment x
segment 2
segment 2
Bookie 2 Bookie 3
Un topic est constitué d’un
ensemble de segments (ledgers)
contenant les messages.
Les segments sont stockés et
répartis sur les bookies.segment x
segment 2
Bookie 4
Broker
Topic 1
segment 2segment 1 segment x...
Bookie 1
segment 1
Une architecture hautement disponible
segment 1 segment 1
segment x
segment x
segment 2
segment 2
Bookie 2 Bookie 3
Sur défection d’un bookie,
automatiquement, récupération des
segments manquants pour
respecter le facteur de réplication
segment x
segment 2
Bookie 4
segment x segment 1
Modes de
consommation
TopicProducteur Consommateur - A1
Exclusive subscription
Subscription A
Consommateur - A2Les tentatives de connexions de A2
échoueront
Topics et abonnements
TopicProducteur Consommateur - B1
Fail-over subscription
Subscription B
Consommateur - B2
Messages consommés par B2,
uniquement en cas d’échec de B1
Topics et abonnements
TopicProducteur Consommateur - C1Subscription C
Consommateur - C2
Les messages sont envoyés aux n consommateurs
(round robin) -> aucune garantie d’ordre !
Topics et abonnements
Shared subscription
TopicProducteur
Consommateur - B1
Consommateur - B2
Consommateur - A1
Consommateur - C1
Consommateur - C2
Exclusive
Subscription
Il peut y avoir plusieurs
abonnements sur un topic
Fail-over
Subscription
Shared
Subscription
Topics et abonnements
Les messages
Messages
Contenu d’un message:
- Tableau d’octets (peut être conforme à un schéma)
- Clé (optionnel)
- Ensemble de propriétés (optionnel)
- Nom du producteur
- Id de séquence (numéro d’ordre dans le topic, attribué
par le producteur)
- Timestamps
Cycle de vie des messages
Avec rétention message
acquitté
message
acquitté
Messages supprimés
(hors rétention)
Messages gardés car dans
la période de rétention
Non traités
message
acquitté
message
acquitté
message non
acquitté
message non
acquitté
Messages
supprimés
Messages supprimés
car au-delà du TTL
Non traités et
encore dans le TTL
message non
acquitté
message non
acquitté
message non
acquitté
message non
acquitté
message
acquitté
message
acquitté
Avec TTL
message
acquitté
message
acquitté
Messages supprimés Non traités
(sauvegardés dans BookKeeper)
message non
acquitté
message non
acquitté
message
acquitté
message
acquittéCas nominal
Développons avec
Pulsar
+ API WebSocket
// Création d’un client (idem producteur et conso)
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://myhostname:6650")
.build();
.authentication(...)
.connectionsPerBroker(5)
.ioThreads(10)
.keepAliveInterval(2, TimeUnit.MINUTES)
.maxNumberOfRejectedRequestPerConnection(5)
.operationTimeout(10, TimeUnit.SECONDS)
...
Producer<byte[]> producer = client.newProducer()
.topic("demo-topic")
.producerName("demo-producer")
.batchingMaxPublishDelay(10, TimeUnit.MILLISECONDS)
.sendTimeout(10, TimeUnit.SECONDS)
.blockIfQueueFull(true)
.create();
MessageId msgId =
producer.send("Hi Folks !".getBytes());
producer.sendAsync("Hi Folks !".getBytes())
.thenAccept(msgId -> {
System.out.printf("Msg %s successfully sent", msgId);
});
Consumer consumer = client.newConsumer()
.topic("demo-topic")
.subscriptionName("demo-exclusive-sub")
.subscriptionType(SubscriptionType.Exclusive)
.subscribe();
// Lecture à partir du premier message non acquitté
Message msg = consumer.receive(1000, TimeUnit.SECONDS);
System.out.printf("Message: %s, from %s with id=%sn",
new String(msg.getData()),
msg.getProducerName(),
msg.getMessageId());
consumer.acknowledge(msg);
Multi-tenancy
Multi-tenancy
Type de topic Nom de l’entité
(tenant)
Nom du
namespace
Nom du topic
persistent://public/default/demo-topic
Multi-tenancy
Pulsar Cluster
Products Ops Tenants
LogsOrders NamespacesStores
2To
Topics
Rétention: 10j
Topic-2 Topic-1Topic-1 Topic-1
persistent://Products/Stores/Topic-1
Geo-replication
Réplication géographique
Cluster A
Topic 1Producteur 1
Cluster B
Topic 1 Producteur 2
Cluster C
Topic 1Producteur 3
Les topics doivent appartenir à un
namespace global
Réplication asynchrone ou synchrone
(persistence local d’abord, puis envoi
aux autres clusters)
Possibilité pour un producteur de
restreindre la réplication à des
clusters donnés
Pulsar Functions
Pulsar Functions
Topic de sortieF
But: offrir un cadre d’exécution de traitements des
données sans utiliser d’environnement complémentaire
Topic d’entrée 1
Peut s’exécuter: dans les brokers, en local, et à terme,
dans des containers (déploiement dans Kubernetes)
Topic d’entrée 2
Topic des logs
import java.util.function.Function;
public class HiFunction
implements Function<String, String> {
@Override
public String apply(String input) {
return String.format("Hi %s!", input);
}
}
def process(input):
return "Hi %s!" % input
$ pulsar-admin functions create 
--jar hifct.jar --className HiFunction 
--fqfn talk/demo/hello 
--inputs persistent://talk/demo/input 
--output persistent://talk/demo/output
import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;
import org.slf4j.Logger;
public class EnhancedHiFunction implements Function<String, String> {
@Override
public String process(String input, Context context) throws Exception {
Logger logger = context.getLogger();
String functionTenant = context.getTenant();
String functionNamespace = context.getNamespace();
String functionName = context.getFunctionName();
logger.info("Function {}/{}/{}: input={}",
functionTenant, functionNamespace, functionName, input);
return String.format("Hi %s!", input);
}
}
$ pulsar-admin functions create 
--jar enhancedhifct.jar 
--className EnhancedHiFunction 
--fqfn talk/demo/hello 
--inputs persistent://talk/demo/input 
--output persistent://talk/demo/output 
--log-topic persistent://talk/demo/logs
Démo
# Lancement de tous les composants
# broker, bookie, zookeeper (pour des tests/dev)
$ pulsar standalone
$ pulsar-admin clusters list
standalone
$ pulsar-admin clusters get standalone
{
"serviceUrl":"http://hostname:8080",
"brokerServiceUrl": "pulsar://hostname:6650"
}
# Producteur: 100 messages, 1msg/sec
$ pulsar-client produce 
-m "hello" 
-n 100 -r 1 
demo-topic
# Consommateur: 1msg/sec sans arrêt
$ pulsar-client consume 
-n 0 -r 1 
-s "demo-subs-exclusive" 
-t Exclusive 
demo-topic
# Multi-tenancy
# - création entité
$ pulsar-admin tenants create talk
# - création namespace
$ pulsar-admin namespaces create talk/demo
# - ajout de quotas
$ pulsar-admin namespaces set-retention 
--size 1T --time 2d talk/demo
Gestion des messages
Brokers
Stockage
Bookies
En résumé...
Traitements
Pulsar Functions
Connecteurs
Pulsar IO
Analytics
Pulsar SQL (Presto)
Stockage tiers
AWS Google Azure HDFS
Clients
Producteurs /
Consommateurs
Auto-promo 😛: https://github.com/bbonnin/pulsar-express
Conclusion
Il existe beaucoup de fonctions
intéressantes (plus ou moins matures):
- découplage broker et stockage
- gestion par segments
- tier-storage,
- geo-replication,
- Pulsar IO
- Pulsar Functions
- Schema registry,
- SQL,
- …
Environnement complet pour couvrir
vos besoins en termes de stream
processing
Aujourd’hui chez Yahoo !
- > 2 millions de topics
- > 100 milliards de messages / jour
- > 150 brokers
Plus d’infos: https://streaml.io/blog
Merci !
@_bruno_b_
Illustrations: https://undraw.co/illustrations

Contenu connexe

PPTX
Apresentacao zabbix
PDF
Maven et industrialisation du logiciel
PDF
Concevoir, développer et sécuriser des micro-services avec Spring Boot
PDF
ADFS クレームルール言語 Deep Dive
PDF
Apache Kafka, Un système distribué de messagerie hautement performant
PPTX
Akka Clustering And Sharding
PDF
DevOps avec Ansible et Docker
PPTX
Présentation DEVOPS.pptx
Apresentacao zabbix
Maven et industrialisation du logiciel
Concevoir, développer et sécuriser des micro-services avec Spring Boot
ADFS クレームルール言語 Deep Dive
Apache Kafka, Un système distribué de messagerie hautement performant
Akka Clustering And Sharding
DevOps avec Ansible et Docker
Présentation DEVOPS.pptx

Tendances (20)

PDF
PPTX
Sécurité-Wifi
PDF
JAWS-UG CLI #26 LT - AWSアカウントに秘密の質問を設定する必要はあるのか?
PDF
ClassLoader Leak Patterns
PDF
Azure Application GatewayでオンプレDMZをクラウドへ拡張する
PPTX
Spring ioc
PDF
AWS初心者向けWebinar これで完璧、AWSの運用監視
PDF
Alphorm.com Formation VMware vSphere 7 : La Mise à Niveau
PDF
Monitoring - 入門監視
PDF
Design Patterns
PPTX
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
PDF
Microsoft License の基本
PDF
Cours JavaScript
PDF
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
PDF
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
PDF
HAProxy TCP 모드에서 내부 서버로 Source IP 전달 방법
PDF
Zabbix
PDF
Social Media Response Flowchart
PPT
Mise en Forme des Résultats avec SQL*Plus
PDF
ORACLE HA NFS over Oracle ASM
Sécurité-Wifi
JAWS-UG CLI #26 LT - AWSアカウントに秘密の質問を設定する必要はあるのか?
ClassLoader Leak Patterns
Azure Application GatewayでオンプレDMZをクラウドへ拡張する
Spring ioc
AWS初心者向けWebinar これで完璧、AWSの運用監視
Alphorm.com Formation VMware vSphere 7 : La Mise à Niveau
Monitoring - 入門監視
Design Patterns
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(応用編)
Microsoft License の基本
Cours JavaScript
[AWSマイスターシリーズ] Amazon VPC VPN & Direct Connect
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
HAProxy TCP 모드에서 내부 서버로 Source IP 전달 방법
Zabbix
Social Media Response Flowchart
Mise en Forme des Résultats avec SQL*Plus
ORACLE HA NFS over Oracle ASM
Publicité

Similaire à Introduction à Apache Pulsar (20)

PDF
Stream processing avec Apache Pulsar
PDF
Documentation serveur acs wibox (dev interne)
PDF
Paris Kafka Meetup - Concepts & Architecture
PDF
Python pocket reference 5ed. Edition Mark Lutz
PDF
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
PDF
TIBCO ESB BW5 - Integration With ActiveMQ 5
PDF
Formation Play! framework
PDF
Alfresco Meetup - ETL Connector & Talend
PDF
1- Introduction-2022.pdf formation python
PDF
1- Introduction-2022.pdf formation python
PDF
Apache kafka big data track
PDF
Quoi de neuf dans la version 11 Alexandria ?
ODP
Comment travailler avec les logiciels Open Source
PDF
Spring Integration JUG SummerCamp 2013
PPTX
Architecture de services web de type ressource
PDF
Tartine - Pixelle, Refonte de l’ingestion et présentation de l’architecture
PPT
20081113 - Nantes Jug - Apache Maven
ODP
Conference Informatique Embarquée Synergie-NTIC
PPT
Digital Marketing ,sur les strategies et astus
PPT
UElibre_Inkkkkkkkkkkkkkkkkkkkkkternet.ppt
Stream processing avec Apache Pulsar
Documentation serveur acs wibox (dev interne)
Paris Kafka Meetup - Concepts & Architecture
Python pocket reference 5ed. Edition Mark Lutz
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
TIBCO ESB BW5 - Integration With ActiveMQ 5
Formation Play! framework
Alfresco Meetup - ETL Connector & Talend
1- Introduction-2022.pdf formation python
1- Introduction-2022.pdf formation python
Apache kafka big data track
Quoi de neuf dans la version 11 Alexandria ?
Comment travailler avec les logiciels Open Source
Spring Integration JUG SummerCamp 2013
Architecture de services web de type ressource
Tartine - Pixelle, Refonte de l’ingestion et présentation de l’architecture
20081113 - Nantes Jug - Apache Maven
Conference Informatique Embarquée Synergie-NTIC
Digital Marketing ,sur les strategies et astus
UElibre_Inkkkkkkkkkkkkkkkkkkkkkternet.ppt
Publicité

Plus de Paris Data Engineers ! (11)

PDF
Spark tools by Jonathan Winandy
PDF
Delta Lake OSS: Create reliable and performant Data Lake by Quentin Ambard
PDF
SCIO : Apache Beam API
PDF
Apache Beam de A à Z
PDF
REX : pourquoi et comment développer son propre scheduler
PDF
Deeplearning in production
PDF
Utilisation de MLflow pour le cycle de vie des projet Machine learning
PDF
10 things i wish i'd known before using spark in production
PDF
Change Data Capture with Data Collector @OVH
PDF
Building highly reliable data pipeline @datadog par Quentin François
PDF
Scala pour le Data Engineering par Jonathan Winandy
Spark tools by Jonathan Winandy
Delta Lake OSS: Create reliable and performant Data Lake by Quentin Ambard
SCIO : Apache Beam API
Apache Beam de A à Z
REX : pourquoi et comment développer son propre scheduler
Deeplearning in production
Utilisation de MLflow pour le cycle de vie des projet Machine learning
10 things i wish i'd known before using spark in production
Change Data Capture with Data Collector @OVH
Building highly reliable data pipeline @datadog par Quentin François
Scala pour le Data Engineering par Jonathan Winandy

Introduction à Apache Pulsar

  • 1. Introduction à Apache Pulsar Bruno Bonnin Meetup #ParisDataEng - 20 juin 2019
  • 2. Directeur technique @ Zenika Nantes
  • 4. Pulsar, un système de messagerie distribué Né chez Yahoo ! pour compenser certaines limites des solutions de l’époque Pour des apps critiques comme Yahoo Mail, Yahoo Finance, Yahoo Sports, etc Open sourcé en 2016 Devenu Top Level Project de la fondation Apache en sept 2018 Premier déploiement Q2 2015
  • 5. Pulsar, un système de messagerie distribué Données répliquées et enregistrées sur disque Garantie d’ordre des messages Réplication géographique des données Multi-entité (tenant) Fort débit / Faible latence Garantie de livraison Hautement scalable
  • 7. Des producteurs, des consommateurs, des topics, ... Topic 1 Producteur Consommateur Topic 2 Topic 3
  • 8. Gestion des messages Producteurs Stockage des messages Bookie 1 Bookie 2 Bookie 3 Bookie 4 Consommateurs zkServer 1 zkServer 2 zkServer 3 Broker 1 Broker 2 Broker 3 lecture stockage meta-données coordination clusters stockage meta-données stockage des données Des brokers, des bookies, ... écriture Apache BookKeeper Apache Zookeeper
  • 9. Bookie 1 Une architecture scalable Broker 1 Broker 2 Bookie 2 Bookie 3 Bookie 4 Gestion des messages Stockage des messages Producteurs Consommateurs Broker 3 Bookie 5 Topic 1
  • 11. Apache BookKeeper Système de stockage scalable, tolérant aux pannes et à faible latence Conçu à l’origine comme une solution pour la haute disponibilité du NameNode de HDFS (WAL) Avec Pulsar: stockage des données et des offsets (cursors)
  • 12. Broker Topic 1 segment 2segment 1 segment x... Bookie 1 segment 1 Une architecture hautement disponible segment 1 segment 1 segment x segment x segment 2 segment 2 Bookie 2 Bookie 3 Un topic est constitué d’un ensemble de segments (ledgers) contenant les messages. Les segments sont stockés et répartis sur les bookies.segment x segment 2 Bookie 4
  • 13. Broker Topic 1 segment 2segment 1 segment x... Bookie 1 segment 1 Une architecture hautement disponible segment 1 segment 1 segment x segment x segment 2 segment 2 Bookie 2 Bookie 3 Sur défection d’un bookie, automatiquement, récupération des segments manquants pour respecter le facteur de réplication segment x segment 2 Bookie 4 segment x segment 1
  • 15. TopicProducteur Consommateur - A1 Exclusive subscription Subscription A Consommateur - A2Les tentatives de connexions de A2 échoueront Topics et abonnements
  • 16. TopicProducteur Consommateur - B1 Fail-over subscription Subscription B Consommateur - B2 Messages consommés par B2, uniquement en cas d’échec de B1 Topics et abonnements
  • 17. TopicProducteur Consommateur - C1Subscription C Consommateur - C2 Les messages sont envoyés aux n consommateurs (round robin) -> aucune garantie d’ordre ! Topics et abonnements Shared subscription
  • 18. TopicProducteur Consommateur - B1 Consommateur - B2 Consommateur - A1 Consommateur - C1 Consommateur - C2 Exclusive Subscription Il peut y avoir plusieurs abonnements sur un topic Fail-over Subscription Shared Subscription Topics et abonnements
  • 20. Messages Contenu d’un message: - Tableau d’octets (peut être conforme à un schéma) - Clé (optionnel) - Ensemble de propriétés (optionnel) - Nom du producteur - Id de séquence (numéro d’ordre dans le topic, attribué par le producteur) - Timestamps
  • 21. Cycle de vie des messages Avec rétention message acquitté message acquitté Messages supprimés (hors rétention) Messages gardés car dans la période de rétention Non traités message acquitté message acquitté message non acquitté message non acquitté Messages supprimés Messages supprimés car au-delà du TTL Non traités et encore dans le TTL message non acquitté message non acquitté message non acquitté message non acquitté message acquitté message acquitté Avec TTL message acquitté message acquitté Messages supprimés Non traités (sauvegardés dans BookKeeper) message non acquitté message non acquitté message acquitté message acquittéCas nominal
  • 24. // Création d’un client (idem producteur et conso) PulsarClient client = PulsarClient.builder() .serviceUrl("pulsar://myhostname:6650") .build(); .authentication(...) .connectionsPerBroker(5) .ioThreads(10) .keepAliveInterval(2, TimeUnit.MINUTES) .maxNumberOfRejectedRequestPerConnection(5) .operationTimeout(10, TimeUnit.SECONDS) ...
  • 25. Producer<byte[]> producer = client.newProducer() .topic("demo-topic") .producerName("demo-producer") .batchingMaxPublishDelay(10, TimeUnit.MILLISECONDS) .sendTimeout(10, TimeUnit.SECONDS) .blockIfQueueFull(true) .create(); MessageId msgId = producer.send("Hi Folks !".getBytes()); producer.sendAsync("Hi Folks !".getBytes()) .thenAccept(msgId -> { System.out.printf("Msg %s successfully sent", msgId); });
  • 26. Consumer consumer = client.newConsumer() .topic("demo-topic") .subscriptionName("demo-exclusive-sub") .subscriptionType(SubscriptionType.Exclusive) .subscribe(); // Lecture à partir du premier message non acquitté Message msg = consumer.receive(1000, TimeUnit.SECONDS); System.out.printf("Message: %s, from %s with id=%sn", new String(msg.getData()), msg.getProducerName(), msg.getMessageId()); consumer.acknowledge(msg);
  • 28. Multi-tenancy Type de topic Nom de l’entité (tenant) Nom du namespace Nom du topic persistent://public/default/demo-topic
  • 29. Multi-tenancy Pulsar Cluster Products Ops Tenants LogsOrders NamespacesStores 2To Topics Rétention: 10j Topic-2 Topic-1Topic-1 Topic-1 persistent://Products/Stores/Topic-1
  • 31. Réplication géographique Cluster A Topic 1Producteur 1 Cluster B Topic 1 Producteur 2 Cluster C Topic 1Producteur 3 Les topics doivent appartenir à un namespace global Réplication asynchrone ou synchrone (persistence local d’abord, puis envoi aux autres clusters) Possibilité pour un producteur de restreindre la réplication à des clusters donnés
  • 33. Pulsar Functions Topic de sortieF But: offrir un cadre d’exécution de traitements des données sans utiliser d’environnement complémentaire Topic d’entrée 1 Peut s’exécuter: dans les brokers, en local, et à terme, dans des containers (déploiement dans Kubernetes) Topic d’entrée 2 Topic des logs
  • 34. import java.util.function.Function; public class HiFunction implements Function<String, String> { @Override public String apply(String input) { return String.format("Hi %s!", input); } }
  • 36. $ pulsar-admin functions create --jar hifct.jar --className HiFunction --fqfn talk/demo/hello --inputs persistent://talk/demo/input --output persistent://talk/demo/output
  • 37. import org.apache.pulsar.functions.api.Context; import org.apache.pulsar.functions.api.Function; import org.slf4j.Logger; public class EnhancedHiFunction implements Function<String, String> { @Override public String process(String input, Context context) throws Exception { Logger logger = context.getLogger(); String functionTenant = context.getTenant(); String functionNamespace = context.getNamespace(); String functionName = context.getFunctionName(); logger.info("Function {}/{}/{}: input={}", functionTenant, functionNamespace, functionName, input); return String.format("Hi %s!", input); } }
  • 38. $ pulsar-admin functions create --jar enhancedhifct.jar --className EnhancedHiFunction --fqfn talk/demo/hello --inputs persistent://talk/demo/input --output persistent://talk/demo/output --log-topic persistent://talk/demo/logs
  • 39. Démo
  • 40. # Lancement de tous les composants # broker, bookie, zookeeper (pour des tests/dev) $ pulsar standalone $ pulsar-admin clusters list standalone $ pulsar-admin clusters get standalone { "serviceUrl":"http://hostname:8080", "brokerServiceUrl": "pulsar://hostname:6650" }
  • 41. # Producteur: 100 messages, 1msg/sec $ pulsar-client produce -m "hello" -n 100 -r 1 demo-topic # Consommateur: 1msg/sec sans arrêt $ pulsar-client consume -n 0 -r 1 -s "demo-subs-exclusive" -t Exclusive demo-topic
  • 42. # Multi-tenancy # - création entité $ pulsar-admin tenants create talk # - création namespace $ pulsar-admin namespaces create talk/demo # - ajout de quotas $ pulsar-admin namespaces set-retention --size 1T --time 2d talk/demo
  • 43. Gestion des messages Brokers Stockage Bookies En résumé... Traitements Pulsar Functions Connecteurs Pulsar IO Analytics Pulsar SQL (Presto) Stockage tiers AWS Google Azure HDFS Clients Producteurs / Consommateurs
  • 45. Conclusion Il existe beaucoup de fonctions intéressantes (plus ou moins matures): - découplage broker et stockage - gestion par segments - tier-storage, - geo-replication, - Pulsar IO - Pulsar Functions - Schema registry, - SQL, - … Environnement complet pour couvrir vos besoins en termes de stream processing Aujourd’hui chez Yahoo ! - > 2 millions de topics - > 100 milliards de messages / jour - > 150 brokers Plus d’infos: https://streaml.io/blog