Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Event Sourcing mit Apache Kafka

257 Aufrufe

Veröffentlicht am

Im Vortrag wird die Entkoppelung von Microservices mit einer auf Event Sourcing bestehenden Architektur beschrieben.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

Event Sourcing mit Apache Kafka

  1. 1. Architektur auf Links gedreht: Event Sourcing mit Apache Kafka OIO HK 2017, Mannheim Thomas Bayer bayer@predic8.de @thomasub Oliver Weiler weiler@predic8.de @helpermethod
  2. 2. Ihre Sprecher 2 Oliver Weiler Trainer, Berater, Entwickler @helpermethod weiler@predic8.de Schwerpunkte Spring Boot & Cloud, Microservices, Kafka, Camel Thomas Bayer Trainer, Berater, Entwickler @thomasub bayer@predic8.de Schwerpunkte Microservices, Architektur
  3. 3. Demo Apache Kafka Eventsourcing Skalierbarkeit Performanz
  4. 4. Start Catalogue Logik API SQL Event Bus ListenerStock Logik API 8080 8081 Demo: Artikel anzeigen
  5. 5. Event Bus Zustandsänderung durch einen Service HTML5 UI JS μService SQL Logik μService Logik UIAPI 1 2 34 5 5 4 Service ließt selbst die Änderung vom Bus, anstatt diese direkt zu übernehmen!
  6. 6. Nachrichtenformat Key: "e5924b54-4217" { "action": "create", "bo": "article", "object": { "uuid": "e5924b54-4217", "name": "Oranges", "price": 6.99, "quantity": 2000 } } Kafka Key = Id des Geschäftsobjektes Wrapper für den Bus Kopie des Geschäftsobjektes
  7. 7. Verarbeitung für das BO switch (op.getBo()) { case "article": handleArticle(op.getAction(), mapper.convertValue(op.getObject(), Stock.class)); return; case "basket": handleBasket(mapper.convertValue(op.getObject(), Basket.class)); }
  8. 8. Implementierung der Aktionen switch (action) { case "create": case "update": articles.put(stock.getUuid(), stock); break; case "delete": articles.remove(stock.getUuid());
  9. 9. Demo Apache Kafka Eventsourcing Skalierbarkeit Performanz
  10. 10. „publish-subscribe messaging rethought as a distributed, partitioned, replicated commit log service“ Quelle: http://spark.apache.org/docs/latest/streaming-kafka-integration.html
  11. 11. Topic: produktion consum Consumer “Herkömmlicher” Broker
  12. 12. Topic: produktion Consumer “Herkömmlicher” Broker
  13. 13. Topic: produktion consum Consumer “Herkömmlicher” Broker
  14. 14. Topic: produktion consum Consumer “Herkömmlicher” Broker
  15. 15. Topic: produktion Consumer “Herkömmlicher” Broker
  16. 16. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Topic: produktion 1 2 3 4 50 Apache Kafka
  17. 17. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Topic: produktion 1 2 3 4 50 Apache Kafka
  18. 18. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} 65 Topic: produktion 1 2 3 40 Apache Kafka
  19. 19. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  20. 20. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  21. 21. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  22. 22. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  23. 23. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  24. 24. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  25. 25. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  26. 26. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Consumer Topic: produktion 651 2 3 40 Apache Kafka
  27. 27. Demo Apache Kafka Eventsourcing Skalierbarkeit Performanz
  28. 28. Restart Catalogue Event Bus ListenerStock Logik API Catalogue Logik API SQL 8080 8081 DB mit Artikeln
  29. 29. Restart Stock Event Bus ListenerStock Logik API Catalogue Logik API SQL 8080 8081 Keine Datenbank Demo: Restart
  30. 30. Synchronisation über den Bus! Catalogue Logik API Stock Logik API Checkout Logik API SQL Event Bus BasketArtikel Artikel Basket Stock Demo: Checkout
  31. 31. COMMAND QUERY RESPONIBILITY SEGREGATION & EVENT SOURCING
  32. 32. Synchronisation über den Bus! Catalogue Logik API Stock Logik API Checkout Logik API SQL Event Bus BasketArtikel Artikel Basket SHARE NOTHING!
  33. 33. Catalogue Catalogue Catalogue Logik API Stock Logik API Checkout Logik API Payment Logik API API Gateway History Logik API SQL Event Bus
  34. 34. id name beschreibung_kurz beschreibung_lang preis warengruppe Einkaufspreis Lieferzeit mindestbestand Artikel id kunde datum gesamtpreis Warenkorb Id name Kunde artikel warenkorb Menge Preis Position Id Name Lieferant Artikel Lieferant Lieferbeziehung Strasse PLZ Ort Adresse id methode Bezahlung Attribute Attribute Methode Attribute Attribute Media Attribute Attribute Type Attribute Attribute Warengruppe Artikel Menge Regal Lagerplatz Strasse PLZ Ort Adresse
  35. 35. Event Bus Zustandsänderung durch einen Service Stock Logik UI Listener Key: "e5924b54-4217" { "action": "create", "bo": "article", "object": { "uuid": "e5924b54-4217", "name": "Oranges", "price": 6.99, "quantity": 2000 } } Bei Änderungen der Nachrichten auf dem Bus wird nur der Listener angepaßt. artikel kunde datum Historie Eigenes Datenmodell Filter ignoriert nicht relevante Nachrichten
  36. 36. Quelle: Wikipedia https://de.wikipedia.org/wiki/Datei:Pacioli.jpg Bilanz „1494 durch den Franziskaner und Mathematiker Luca Pacioli in seinem Buch Summa de arithmetica, geometria, proportioni et proportionalità beschrieben” Quelle: Wikipedia
  37. 37. Bilanz Aktiva Passiva Anlagevermögen 125 Bank 100 Eigenkapital 25 Rückstellungen 50 Verbindlichkeiten 150 225225 Vereinfacht! Stichtagsbetrachtung: Bilanz 31.12.2016
  38. 38. Journal Aktiva Passiva Anlagevermögen 125 Bank 100 Eigenkapital 25 Rückstellungen 50 Verbindlichkeiten 150 225225 Journal Bank +30 Bank -20 Bank +60 Bank +30 Vereinfacht! Stichtagsbetrachtung:Verlauf: Bilanz 31.12.2016
  39. 39. Bilanz Aktiva Passiva Anlagevermögen 125 Bank 100 Eigenkapital 25 Rückstellungen 50 Verbindlichkeiten 150 225225 Journal Bank +30 Bank -20 Bank +60 Bank +30 Vereinfacht! Stichtagsbetrachtung: Verlauf: SQL Event Bus 0 1 2 3 Bilanz 31.12.2016 +30 -20 +60 +30 Bank 100
  40. 40. Auf Links gedreht Quelle: https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/ Event Bus 0 1 2 3 4 SQL Memory Writes = Strom von append only Tatsachen Optimierter View für die jeweilige Anwendung
  41. 41. Demo Apache Kafka Eventsourcing Skalierbarkeit Performanz
  42. 42. Catalogue Stock Skalierung der X-Achse Catalogue Logik API Stock Logik API Checkout Logik API SQL Event Bus
  43. 43. CheckoutStock Load Balancing über API Gateway Event Bus ListenerStock Logik API Catalogue Catalogue Logik API SQL API Gateway Demo: Skalierbarkeit Checkout Logik API
  44. 44. Demo Apache Kafka Eventsourcing Skalierbarkeit Performanz
  45. 45. Key: 4 Value: {...} Key: 2 Value: {...} Key: 5 Value: {...} Key: 4 Value: {...} Key: 7 Value: {...} Key: 2 Value: {...} Key: 8 Value: {...} Topic: produktion 1 2 3 4 50 O(1)
  46. 46. Write Batch Read Option: fetch.min.bytes Reads und Writes beeinflussen sich nicht! Demo: Performanz
  47. 47. Key: 4 Partition: 0 Partition: 1 Partition: 2 0 Key: 2 Key: 1 0 Key: 3 1 Key: 1 0 2 Key: 5 1 Key: 4 Key: 5 2 Key: 1 3 Consumer 1 (Offset: 0) Group: Bestellung Consumer 2 (Offset: 0) Group: Bestellung Consumer 3 (Offset 0) Group: Bestellung Producer Partitioner hash(2) modulo 3 Partitioning/Skalierung Broker
  48. 48. Key: 4 Value: {...} Key: 1 Value: {...} Key: 4 Value: {...} Key: 5 Value: {...} Key: 2 Value: {...} Key: 4 Value: {...} Key: 1 Value: {...} Key: 2 Value: {...} Key: 3 Value: {...} Key: 4 Value: {...} Key: 3 Value: {...} 0 1 2 3 4 5 6 7 8 9 10 Alles was älter ist als z.B. 24 Stunden Max. 1 TByte behalten
  49. 49. Key: 4 Value: {...} Key: 1 Value: {...} Key: 4 Value: {...} Key: 5 Value: {...} Key: 2 Value: {...} Key: 4 Value: {...} Key: 1 Value: {...} Key: 2 Value: {...} Key: 3 Value: {...} Key: 4 Value: {...} Key: 3 Value: {...} 0 1 2 3 4 5 6 7 8 9 10 { “id“: 4, “name“: “Pineapple“, “preis“: 1.90, } { “id“: 4, “name“: “Pineapple“, “preis“: 1.99, } { “id“: 4, “name“: “Pineapple“, “preis“: 1.85, } { “id“: 4, “name“: “Pineapple“, “preis“: 2.10, }
  50. 50. Key: 5 Value: {...} Key: 1 Value: {...} Key: 2 Value: {...} Key: 4 Value: {...} Key: 3 Value: {...} 0 1 2 3 4 5 6 7 8 9 10
  51. 51. Fazit Eventsourcing • Reaktive Microservices • Autonom, Resilient, Entkoppelt • Andere Bedeutung! • Ungewohnt • Ermöglicht isolierte Microservices • Löst Verteilung und Synchronisation
  52. 52. Danke! Oliver weiler@predic8.de @helpermethod Thomas bayer@predic8.de @thomasub

×