Streaming von Datenbankänderungen mit Debezium (JUG Saxony Day)

Streaming von Datenbankänderungen mit Debezium (JUG Saxony Day)

Caches und Suchindizes aktualisieren, Daten zwischen Microservices synchronisieren, Lesemodelle in CQRS-Architekturen erstellen, Datentransfers vom operativen System zu Analytics-Tools - nur einige der Use Cases, die das Streaming von Änderungen aus Datenbanken ermöglicht.

Der Vortrag führt in das Konzept von Change Data Capture (CDC) ein und beleuchtet, wie dieses mit Debezium realisiert werden kann, einer auf Apache Kafka basierenden Open-Source-CDC-Lösung. Wir betrachten, wie Debezium Änderungen aus Datenbanken wie MySQL, PostgreSQL und MongoDB erfasst, wie man auf Change Data Events in Beinahe-Echtzeit reagieren kann und wie Debezium die Korrektheit und Vollständigkeit der Daten sicherstellt, auch falls einmal etwas schief geht, etwa weil der Message-Broker vorübergehend ausfällt.

8e25c0ca4bf25113bd9c0ccc5d118164?s=128

Gunnar Morling

September 28, 2018
Tweet

Transcript

  1. Streaming von Datenbankänderungen Streaming von Datenbankänderungen mit Debezium mit Debezium

    Gunnar Morling Gunnar Morling @gunnarmorling @gunnarmorling
  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. 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 @gunnarmorling gunnar@hibernate.org http://in.relation.to/gunnar-morling/ #Debezium @gunnarmorling
  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. 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. 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 Auch: Monolithenextraktion @gunnarmorling Order Item Stock App Lokale DB Lokale DB Lokale DB App App Item-Änderungen Stock-Änderungen #Debezium
  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. Change Streams Change Streams erstellen erstellen

  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
  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
  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) Persistent und pull-basiert Log Compaction Horizontale Skalierbarkeit @gunnarmorling #Debezium
  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
  13. CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect @gunnarmorling Postgres

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

    CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  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
  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
  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
  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
  19. Debezium-Konnektoren Debezium-Konnektoren MySQL Postgres MongoDB Oracle (Tech Preview, XStream-basiert) SQL

    Server (Tech Preview) Geplant Cassandra? MariaDB? @gunnarmorling #Debezium
  20. Debezium Debezium Aktuell: 0.8/0.9 (basierend auf Kafka 2.0) 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
  21. Demo Demo

  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
  23. Demo Demo

  24. Ausblick Ausblick Debezium 0.9 Weiterentwicklung Oracle und SQL Server Alternative

    zu XStreams für Oracle Debezium 0.x Installation via OpenShift-Servicekatalog Reactive Streams-Support Caching via Infinispan Debezium 1.x Standalone Server, Support für Kinesis, Pulsar etc. Event-Aggregation, Bausteine für deklarativen CQRS-Support @gunnarmorling #Debezium
  25. 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
  26. 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
  27. Ressourcen Ressourcen Website: Quellcode, Beispiele, Compose-Set-up etc. Diskussionen, Hilfe Roadmap

    @debezium http://debezium.io/ https://github.com/debezium https://groups.google.com/forum/ #!forum/debezium http://debezium.io/docs/roadmap/ @gunnarmorling #Debezium
  28. None