Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Stream processing avec Apache Pulsar

176 vues

Publié le

Presentation of Apache Pulsar (in French) for Devoxx Morocco 2019 conference

Publié dans : Technologie
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/qURD } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/qURD } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/qURD } ......................................................................................................................... Download doc Ebook here { https://soo.gd/qURD } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

Stream processing avec Apache Pulsar

  1. 1. Stream processing avec Apache Pulsar Bruno Bonnin @_bruno_b_ https://bonnin.dev
  2. 2. Directeur Technique / Consultant @ Zenika Nantes
  3. 3. 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
  4. 4. Concepts & architecture
  5. 5. Des producteurs, des consommateurs, des topics, ... Topic 1 Producteur Consommateur Topic 2 Topic 3
  6. 6. 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
  7. 7. 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
  8. 8. 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 : Write-Ahead Logging) Avec Pulsar: stockage des données et des offsets (cursors)
  9. 9. 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
  10. 10. 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
  11. 11. Modes de consommation
  12. 12. TopicProducteur Consommateur - A1 Exclusive subscription Subscription A Consommateur - A2Les tentatives de connexions de A2 échoueront Topics et abonnements
  13. 13. 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
  14. 14. TopicProducteur Consommateur - C1Subscription C Consommateur - C2 Les messages sont envoyés aux deux consommateurs (round robin) -> aucune garantie d’ordre ! Topics et abonnements Shared subscription
  15. 15. 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
  16. 16. Les messages
  17. 17. 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
  18. 18. 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
  19. 19. Démo
  20. 20. # 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" }
  21. 21. # Producteur: 100 messages, 1msg/sec $ pulsar-client produce -m "Hello Devoxx Morocco" -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
  22. 22. Développons avec Pulsar
  23. 23. + API WebSocket
  24. 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. 25. Producer<byte[]> producer = client.newProducer() .topic("demo-topic") .producerName("demo-producer") .... .create(); // Envoi synchrone MessageId msgId = producer.send("Hi Devoxx!".getBytes()); // Envoi asynchrone producer.sendAsync("Hi Devoxx!".getBytes()) .thenAccept(msgId -> { System.out.printf("Msg %s successfully sent", msgId); });
  26. 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); // A ne pas oublier
  27. 27. Schema Registry Par défaut, le type des messages est byte[] Pulsar fournit un système de contrôle des types de données: uniquement valable pour les clients Java !! Les schémas sont automatiquement uploadés sur les brokers à la création des producteurs (et bien sûr sauvegardés dans BookKeeper 😋) Gestion des versions
  28. 28. // Côté producteur Producer<Order> producer = client.newProducer(JSONSchema.of(Order.class)) .topic("orders") .create(); Order order = new Order(product, quantity); producer.send(order);
  29. 29. // Côté consommateur Consumer<Order> consumer = client.newConsumer(JSONSchema.of(Order.class)) .topic("orders") ... .subscribe(); Message<Order> msg = consumer.receive(1000, TimeUnit.SECONDS); Order order = msg.getValue();
  30. 30. Multi-tenancy
  31. 31. Multi-tenancy Type de topic Nom de l’entité (tenant) Nom du namespace Nom du topic persistent://public/default/demo-topic
  32. 32. Multi-tenancy Pulsar Cluster Sales Ops Tenants DC1Online NamespacesStores 20 To Topics Rétention: 10j Fraud ClientsOrders Logs persistent://Sales/Stores/Clients
  33. 33. # Multi-tenancy # - création entité $ pulsar-admin tenants create sales # - création namespace $ pulsar-admin namespaces create sales/online # - ajout de quotas $ pulsar-admin namespaces set-retention --size 20T --time 2d sales/online
  34. 34. Pulsar Functions
  35. 35. 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 Topic d’entrée 2 Topic des logs State
  36. 36. def process(input): return "Hi %s!" % input
  37. 37. // Exemple le plus simple, sans framework import java.util.function.Function; public class HiFunction implements Function<String, String> { @Override public String apply(String inputMsg) { return String.format("Hi %s!", inputMsg); } }
  38. 38. 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); } }
  39. 39. Dans les brokers Pulsar Functions - Déploiement Broker 1 Function workers Broker 2 Function workers Broker 1 Dans des containers Function worker 1 Broker 2 Function worker 2 En local Function workers
  40. 40. # Déploiement d’une fonction $ pulsar-admin functions create --jar my_pulsar_fct.jar --className MyPulsarFunction --fqfn demo/test/hello --inputs persistent://demo/test/input --output persistent://demo/test/output --log-topic persistent://demo/test/logs --cpu 8 --ram 8589934592 --disk 10737418240
  41. 41. Pulsar Functions Exemples de cas d’utilisation des Functions: - Routage des messages - Filtrage if ("US".equals(order.country()) context.publish("sales/online/orders-us", order); else context.publish("sales/online/orders-not-us", order); public Order process(Order order) { if (order.total() > 10000) return order; return null; }
  42. 42. Pulsar Functions Exemples de cas d’utilisation des Functions: - Modification des messages - Alertes public Order process(Order order) { order.setEmail(anonymize(order.getEmail())); return order; } public String process(Sensor sensor) { if (sensor.getTemp() > 50) // Envoi d’un mail ... return null; }
  43. 43. Pulsar Functions Et quoi d’autres ? - stockage de métriques, de compteurs (stockés dans Apache BookKeeper, bien sûr) - utilisation de paramètres de config, - fenêtrage (sliding window, tumbling window) public Void process(Order order, Context context) { Double threshold = context.getUserConfigValue("threshold"); Float previous = context.getState(order.getId() + "-metric"); context.incrCounter(order.getId() + "-metric", 1); }
  44. 44. Pulsar IO
  45. 45. Pulsar IO Pulsar Topic Connecteur Source Connecteur Sink
  46. 46. Pulsar IO CDC basé sur
  47. 47. SQL
  48. 48. Pulsar SQL Basé sur Lecture directe sur Apache BookKeeper
  49. 49. $ pulsar sql-worker run
  50. 50. $ pulsar sql presto> show catalogs; presto> show schemas in pulsar; presto> show tables in pulsar."demo/ecommerce"; Catalog --------- pulsar system Schema ----------------------- information_schema public/default public/functions demo/ecommerce Table --------------- orders-all orders-not-us orders-usTOPICS NAMESPACES
  51. 51. presto> select id, orderdate, ipaddress, amount, email from pulsar."demo/ecommerce"."orders-all"; id | orderdate | ipaddress | amount | email -------------+---------------+-----------------+--------+---------------------------------- 307-02-9402 | 1561409774204 | 94.244.112.41 | 596.59 | robyn.kutch@hotmail.com 470-87-6280 | 1561409774501 | 82.244.158.201 | 135.39 | alexia.powlowski@gmail.com 842-89-5722 | 1561409774704 | 60.73.130.208 | 112.89 | zora.mccullough@hotmail.com 795-45-3565 | 1561409775408 | 231.96.223.0 | 60.75 | gerard.smitham@hotmail.com 876-36-9065 | 1561409775924 | 29.189.193.82 | 768.13 | ehtel.towne@gmail.com 840-97-8273 | 1561409776044 | 93.240.237.245 | 308.92 | don.gerlach@yahoo.com 043-41-7461 | 1561409776348 | 186.116.245.21 | 206.03 | raymond.bosco@gmail.com 069-72-8645 | 1561409776591 | 106.113.25.240 | 144.54 | alexandra.predovic@gmail.com
  52. 52. Geo-replication
  53. 53. Réplication géographique Cluster A Topic 1Producteur Cluster B Topic 1 Cluster C Topic 1Consommateur 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 Producteur
  54. 54. Démo https://github.com/bbonnin/talk-intro-apache-pulsar
  55. 55. Autres frameworks Ma supérette en ligne !!! Broker Topic orders-all Producteur Java “Order Generator” Consommateur CLI “pulsar-client” Functions FilterOrder Topic orders-us Connectors (IO) Elasticsearch Sink SQL Stockage Bookie Flink
  56. 56. 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 Flink Spark
  57. 57. Conclusion Il existe beaucoup de fonctions intéressantes : - découplage broker et stockage - 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
  58. 58. Auto-promo 😛: https://github.com/bbonnin/pulsar-express
  59. 59. MERCI ! Illustrations: https://undraw.co/illustrations

×