Streaming von Datenbankänderungen mit Debezium (JUG Darmstadt)

Streaming von Datenbankänderungen mit Debezium (JUG Darmstadt)

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 (http://debezium.io) 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.

8e25c0ca4bf25113bd9c0ccc5d118164?s=128

Gunnar Morling

July 18, 2018
Tweet

Transcript

  1. 1.
  2. 2.

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

    Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium @gunnarmorling
  3. 3.

    Gunnar Morling Gunnar Morling Open Source Software Engineer bei Red

    Hat Debezium Hibernate Spec Lead für Bean Validation 2.0 Weitere Projekte: ModiTect, MapStruct gunnar@hibernate.org @gunnarmorling http://in.relation.to/gunnar-morling/ #Debezium @gunnarmorling
  4. 4.

    Change Data Capture Change Data Capture Worum geht's? Worum geht's?

    Event-Stream mit allen Daten- und Schemaänderungen einer DB @gunnarmorling Apache Kafka DB 1 #Debezium ?
  5. 5.

    CDC Use Cases CDC Use Cases Datenreplikation 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
  6. 6.

    CDC Use Cases CDC Use Cases Microservice-Architekturen 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 Item-Änderungen Stock-Änderungen #Debezium
  7. 7.

    CDC Use Cases CDC Use Cases Weitere Weitere Caches aktualisieren

    oder invalidieren Aktualisierung von Volltext-Indices via Elasticsearch, Solr etc. CQRS Read-Modelle Streaming Queries UI-Live-Updates @gunnarmorling #Debezium
  8. 9.

    Wie Change Streams erstellen? Wie Change Streams erstellen? Mögliche Ansätze

    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. 10.

    Wie Change Streams erstellen? Wie Change Streams erstellen? Die Lösung:

    Monitoring der DB Die Lösung: Monitoring der DB DB trägt Änderungen in Log-Dateien ein und aktualisiert dann die Tabellen Verwendet für Transaktions-Recovery, Replikation etc. Log-Dateien = Perfekte Basis für CDC MySQL: Binlog; Postgres: Write-Ahead Log; MongoDB Op Log Transparent für schreibende Applikationen Verzögerungen möglich, aber keine Inkonsistenzen @gunnarmorling #Debezium
  10. 11.

    Apache Kafka Apache Kafka Perfekte Basis für CDC-Pipelines Perfekte Basis

    für CDC-Pipelines Messages haben einen Key Garantierte Ordnung (pro Partition) Pull-basiert Log Compaction Horizontale Skalierbarkeit @gunnarmorling #Debezium
  11. 12.

    @gunnarmorling Kafka Connect Kafka Connect Framework für Source- und Sink-Konnektoren

    Offset-Verwaltung Typsystem und Schema-Support Clustering Großes Ökosystem von Konnektoren #Debezium
  12. 14.

    @gunnarmorling Postgres MySQL Apache Kafka Kafka Connect Kafka Connect #Debezium

    CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  13. 15.

    @gunnarmorling Postgres MySQL Apache Kafka Kafka Connect Kafka Connect DBZ

    PG DBZ MySQL #Debezium CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  14. 16.

    @gunnarmorling Postgres MySQL Kafka Connect Kafka Connect Apache Kafka DBZ

    PG DBZ MySQL Elasticsearch ES Connector #Debezium CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  15. 17.

    CDC-Event-Struktur 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": "annek@noanswer.org" }, "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
  16. 18.

    Initiale Snapshots 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
  17. 19.

    Debezium-Konnektoren Debezium-Konnektoren MySQL Postgres MongoDB Oracle (Tech Preview, XStream-basiert) Geplant

    SQL Server (in Entwicklung) Cassandra? MariaDB? @gunnarmorling #Debezium
  18. 20.

    Debezium Debezium Aktuell: 0.8 (basierend auf Kafka 1.1) Einheitliche Eventstruktur

    Umfangreiche Typunterstützung (PostGIS etc.) Nutzbar auf Amazon RDS Monitoring via JMX Gemeinsame Optionen (Filter etc.) Im Produktiv-Einsatz bei Trivago, WePay, BlaBlaCar und anderen Rege Community @gunnarmorling #Debezium
  19. 21.
  20. 22.

    Message-Transformationen Message-Transformationen Bearbeitung einzelner Events via SMTs 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
  21. 23.
  22. 24.

    Ausblick Ausblick Debezium 0.9 Oracle Snapshotting, Support für SQL Server

    Debezium 0.x Alternative zu XStreams für Oracle (LogMiner) Installation via OpenShift-Servicekatalog Reactive Streams-Support Debezium 1.x Standalone Server, Support für Kinesis, Pulsar etc. Event-Aggregation, Bausteine für deklarativen CQRS-Support Roadmap: http://debezium.io/docs/roadmap/ @gunnarmorling #Debezium
  23. 25.

    Probiert es selber aus Probiert es selber aus Docker-Images für

    alle Komponenten Umfangreiches Tutorial Docker Compose Set-up Anleitung für OpenShift Strimzi (Kafka auf Kubernetes/OpenShift) http://debezium.io/docs/tutorial/ https://github.com/debezium/debezium-examples/ http://debezium.io/docs/openshift/ http://strimzi.io/ @gunnarmorling #Debezium
  24. 26.

    Zusammenfassung 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) Contributions herzlich willkommen! @gunnarmorling #Debezium
  25. 27.

    Ressourcen 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
  26. 28.