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

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.

Gunnar Morling

September 28, 2018
Tweet

More Decks by Gunnar Morling

Other Decks in Programming

Transcript

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

    Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium @gunnarmorling
  2. 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 [email protected] http://in.relation.to/gunnar-morling/ #Debezium @gunnarmorling
  3. 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 ?
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. @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
  11. @gunnarmorling Postgres MySQL Apache Kafka Kafka Connect Kafka Connect #Debezium

    CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  12. @gunnarmorling Postgres MySQL Apache Kafka Kafka Connect Kafka Connect DBZ

    PG DBZ MySQL #Debezium CDC-Topologie mit Kafka Connect CDC-Topologie mit Kafka Connect
  13. @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
  14. 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": "[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
  15. 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
  16. Debezium-Konnektoren Debezium-Konnektoren MySQL Postgres MongoDB Oracle (Tech Preview, XStream-basiert) SQL

    Server (Tech Preview) Geplant Cassandra? MariaDB? @gunnarmorling #Debezium
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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