"Apache Pulsar, encore un système de messages pub/sub", me direz-vous ? C'est pas faux... Néanmoins, regardons de plus près... Pulsar est devenu un Top Level Project de la fondation Apache au mois de septembre 2018 et il se targue de vouloir unifier les modèles de messages traditionnels et le streaming, tout en fournissant un système extrêmement performant. Alors partons à la découverte de ce nouveau pulsar pour voir de quoi il retourne !
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
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
10.
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
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);
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
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