Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Streaming von Datenbankänderungen mit Debezium

Streaming von Datenbankänderungen mit Debezium

Debezium (Substantiv | de·be·zi·um | /dɪ:ˈbɪ:ziːəm/) - Geheimzutat für Change Data Capture

Die Aktualisierung von Caches und Volltextindizes, die Synchronisation von Daten zwischen verschiedenen Microservices, die Erstellung von optimierten Lesemodellen in CQRS-Architekturen, Datentransfers vom operativen System zu Analytics-Tools -- dies sind nur einige der Use Cases, die durch das Streamen von Änderungen aus Datenbanken heraus ermöglicht werden.

Der Vortrag führt in das Konzept von Change Data Capture (CDC) ein und beleuchtet, wie dieses mittels Debezium umgesetzt werden kann, einer auf Apache Kafka basierenden Open-Source-CDC-Lösung.

Wir werden betrachten, wie Debezium alle Änderungen aus Datenbanken wie MySQL, PostgreSQL und MongoDB erfasst, wie man auf die entsprechenden Ereignisse in Beinahe-Echtzeit reagieren kann und wie Debezium die Korrektheit und Vollständigkeit der Daten auch dann sicherstellt, falls einmal etwas schief geht, etwa weil eine Zieldatenbank vorübergehend ausfällt.

Slides von einem Vortrag bei der Java User Group Hamburg (https://www.meetup.com/de-DE/jug-hamburg/events/246838959/).

Gunnar Morling

February 08, 2018
Tweet

More Decks by Gunnar Morling

Other Decks in Programming

Transcript

  1. Agenda Use Cases für Change Data Streams Change Data Streams

    erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium @gunnarmorling 2
  2. Gunnar Morling Open Source Software Engineer bei Red Hat Debezium

    Hibernate Spec Lead für Bean Validation 2.0 Weitere Projekte: ModiTect, MapStruct [email protected] @gunnarmorling http://in.relation.to/gunnar-morling/ #Debezium @gunnarmorling 3
  3. Change Data Capture Worum geht's? Event-Stream mit allen Daten- und

    Schemänderungen einer DB @gunnarmorling Apache Kafka DB 1 #Debezium ? 4
  4. CDC Use Cases Datenreplikation Daten aus einer DB an eine

    andere übertragen Analytics-System oder DWH befüllen Daten an andere Teams übermitteln @gunnarmorling Apache Kafka DB 1 DB 2 #Debezium 5
  5. CDC Use Cases Microservice-Architekturen Propagation von Daten zwischen verschiedenen Services

    ohne Kopplung Jeder Service hält lokal seine optimierte Datensicht @gunnarmorling Order Item Stock App Lokale DB Lokale DB Lokale DB App App 6 Item-Änderungen Stock-Änderungen #Debezium
  6. CDC Use Cases Weitere Caches aktualisieren oder invalidieren Aktualisierung von

    Volltext-Indices via Elasticsearch, Solr etc. CQRS Read-Modelle Live-Updates in Nutzerschnittstellen @gunnarmorling #Debezium 7
  7. Wie Change Streams erstellen? Mögliche Ansätze Dual Write Fehlerbehandlung? Race

    Conditions möglich Polling Wie veränderte Datensätze finden? Wie Löschungen erkennen? https://www.confluent.io/blog/using-logs-to-build-a-solid- data-infrastructure-or-why-dual-writes-are-a-bad-idea/ @gunnarmorling #Debezium 9
  8. Wie Change Streams erstellen? Die Lösung: Monitoring der DB Log-Files

    der DB auslesen Bei Ausfällen nur Verzögerungen aber keine Inkonsistenzen Transparent für schreibende Anwendungen @gunnarmorling #Debezium 10
  9. Database Logs Details Anwendungen schreiben in die DB DB trägt

    Änderungen in Log-Dateien ein und aktualisiert dann die Tabellen Logs genutzt für TX Recovery, Replikation etc. MySQL: binlog Postgres: write-ahead log MongoDB op log Perfekte Quelle für CDC! @gunnarmorling #Debezium 11
  10. Apache Kafka Perfekte Basis für CDC-Pipelines Messages haben einen Key

    Garantierte Ordnung (pro Partition) Pull-basiert Log Compaction Horizontale Skalierbarkeit @gunnarmorling #Debezium 12
  11. @gunnarmorling Kafka Connect Framework für Source- und Sink-Konnektoren Offset-Verwaltung Typsystem

    und Schema-Support Clustering Großes Ökosystem von Konnektoren #Debezium 13
  12. @gunnarmorling Postgres MySQL Apache Kafka Kafka Connect Kafka Connect DBZ

    PG DBZ MySQL #Debezium CDC-Topologie mit Kafka Connect 16
  13. @gunnarmorling Postgres MySQL Kafka Connect Kafka Connect Apache Kafka DBZ

    PG DBZ MySQL Elasticsearch ES Connector 17 #Debezium CDC-Topologie mit Kafka Connect
  14. CDC-Event-Struktur Schlüssel (PK der Tabelle) und Wert Payload: Vorher-/Nachher-Zustand, Source-Info

    JSON Lesbar Verbose Optional: Schema in jeder Nachricht Avro Kompakte Binärrepräsentation Nutzt Confluent Schema Registry { "schema": { ... }, "payload": { "before": null, "after": { "id": 1004, "first_name": "Anne", "last_name": "Kretchmar", "email": "[email protected]" }, "source": { "name": "dbserver1", "server_id": 0, "ts_sec": 0, "file": "mysql-bin.000003", "pos": 154, "row": 0, "snapshot": true, "db": "inventory", "table": "customers" }, "op": "c", "ts_ms": 1486500577691 } } @gunnarmorling #Debezium 18
  15. Initiale Snapshots TX Logs können zum Startzeitpunkt des Konnektors unvollständig

    sein Erstellung eines Snapshots der Tabellen (übermittelt INSERT-Events) Danach Lesen der Logs @gunnarmorling #Debezium 19
  16. Debezium Aktuell: 0.7.x (basierend auf Kafka 1.0) Umfangreiche Typunterstützung (PostGIS

    etc.) Nutzbar auf Amazon RDS Monitoring via JMX Im Produktiv-Einsatz bei Trivago, WePay und anderen Rege Community @gunnarmorling #Debezium 21
  17. Message-Transformationen Bearbeitung einzelner Events via SMTs Use Cases: Extraktion Konvertierung

    Routing Anwendbar auf Source- oder Sink-Seite Verfügbar in Debezium: Logical Table Router Event Flattening SMT @gunnarmorling #Debezium 23
  18. Ausblick Debezium 0.8/0.9 Support für Oracle Debezium 0.x Support für

    SQL Server, Infinispan als Sink Installation via OpenShift-Servicekatalog Reactive Streams-Support Debezium 1.x Event-Aggregation, Bausteine für deklarativen CQRS-Support Roadmap: http://debezium.io/docs/roadmap/ @gunnarmorling #Debezium 25
  19. Probiert es selber aus Docker-Images für alle Komponenten Umfangreiches Tutorial

    Docker Compose Set-up Anleitung für OpenShift http://debezium.io/docs/tutorial/ https://github.com/debezium/debezium-examples/ http://debezium.io/docs/openshift/ @gunnarmorling #Debezium 26
  20. Zusammenfassung Debezium: CDC für diverse DBs Transparentes Aufsetzen von Change

    Data Streams Funktioniert zuverlässig auch im Fehlerfall Keine "Dual-Write"-Problematik Clients setzen nach Ausfall am letzten Offset fort Alles ist Open Source (Apache License v2) Neue Mitstreiter herzlich willkommen! @gunnarmorling #Debezium 27
  21. Ressourcen Website Quellcode, Beispiele, Compose-Set-up etc. Diskussionen, Hilfe Aktuelle Neuigkeiten

    @debezium http://debezium.io/ https://github.com/debezium https://groups.google.com/forum/ #!forum/debezium @gunnarmorling #Debezium 28
  22. 29