streaming von datenbankänderungen mit debezium fileagenda use cases für change data streams change...

28
Streaming von Datenbankänderungen Streaming von Datenbankänderungen mit Debezium mit Debezium Gunnar Morling Gunnar Morling @gunnarmorling @gunnarmorling

Upload: lydang

Post on 14-Aug-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Streaming von DatenbankänderungenStreaming von Datenbankänderungen

mit Debeziummit Debezium

 

Gunnar MorlingGunnar Morling  @gunnarmorling@gunnarmorling

Page 2: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

AgendaAgenda

Use Cases für Change Data Streams

Change Data Streams erstellen

Change Data Capture mit Kafka (Connect)

Debezium

Demo

#Debezium @gunnarmorling

Page 3: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Gunnar MorlingGunnar 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

Page 4: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Change Data CaptureChange Data Capture

Worum geht's?Worum geht's?

Event-Stream mit allen Daten- und Schemaänderungen einer DB

@gunnarmorling

Apache Kafka

DB 1

#Debezium

?

Page 5: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

CDC Use CasesCDC Use Cases

DatenreplikationDatenreplikation

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

Page 6: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

CDC Use CasesCDC Use Cases

Microservice-ArchitekturenMicroservice-Architekturen

Propagation von Daten zwischenverschiedenen Services ohneKopplung

Jeder Service hält lokal seine optimierte Datensicht

Auch: Monolithenextraktion

@gunnarmorling

Order Item Stock

App

Lokale DB Lokale DB Lokale DB

App App

Item-ÄnderungenStock-Änderungen

#Debezium

Page 7: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

CDC Use CasesCDC Use Cases

WeitereWeitere

Caches aktualisieren oder invalidieren

Aktualisierung von Volltext-Indices via Elasticsearch, Solr etc.

CQRS Read-Modelle

Streaming Queries

UI-Live-Updates

@gunnarmorling#Debezium

Page 8: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Change StreamsChange Streams

erstellenerstellen

Page 9: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Wie Change Streams erstellen?Wie Change Streams erstellen?

Mögliche AnsätzeMö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

Page 10: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Wie Change Streams erstellen?Wie Change Streams erstellen?

Die Lösung: Monitoring der DBDie 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

Page 11: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Apache KafkaApache Kafka

Perfekte Basis für CDC-PipelinesPerfekte Basis für CDC-Pipelines

Messages haben einen Key

Garantierte Ordnung (pro Partition)

Persistent und pull-basiert

Log Compaction

Horizontale Skalierbarkeit

@gunnarmorling#Debezium

Page 12: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

@gunnarmorling

Kafka ConnectKafka Connect

Framework für Source- und Sink-Konnektoren

Offset-Verwaltung

Typsystem und Schema-Support

Clustering

Großes Ökosystem von Konnektoren

#Debezium

Page 13: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

CDC-Topologie mit Kafka ConnectCDC-Topologie mit Kafka Connect

@gunnarmorling

Postgres

MySQL

Apache Kafka

#Debezium

Page 14: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

@gunnarmorling

Postgres

MySQL

Apache KafkaKafka Connect Kafka Connect

#Debezium

CDC-Topologie mit Kafka ConnectCDC-Topologie mit Kafka Connect

Page 15: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

@gunnarmorling

Postgres

MySQL

Apache KafkaKafka Connect Kafka Connect

DBZ PG

DBZMySQL

#Debezium

CDC-Topologie mit Kafka ConnectCDC-Topologie mit Kafka Connect

Page 16: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

@gunnarmorling

Postgres

MySQL

Kafka Connect Kafka ConnectApache Kafka

DBZ PG

DBZMySQL

Elasticsearch

ES Connector

#Debezium

CDC-Topologie mit Kafka ConnectCDC-Topologie mit Kafka Connect

Page 17: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

CDC-Event-StrukturCDC-Event-Struktur

Schlüssel (PK der Tabelle) und Wert

Payload: Vorher-/Nachher-Zustand, Source-Info

JSON

Lesbar

VerboseOptional: Schema in jeder Nachricht

Avro

Kompakte BinärrepräsentationNutzt 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

Page 18: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Initiale SnapshotsInitiale 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

Page 19: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Debezium-KonnektorenDebezium-Konnektoren

MySQL

Postgres

MongoDB

Oracle (Tech Preview, XStream-basiert)

SQL Server (Tech Preview)

Geplant

Cassandra?MariaDB?

@gunnarmorling#Debezium

Page 20: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

DebeziumDebezium

Aktuell: 0.8/0.9 (basierend auf Kafka 2.0)

Einheitliche EventstrukturUmfangreiche Typunterstützung (PostGIS etc.)Nutzbar auf Amazon RDSMonitoring via JMXGemeinsame Optionen (Filter etc.)

Im Produktiv-Einsatz bei Trivago, WePay, BlaBlaCar und anderen

Rege Community

@gunnarmorling#Debezium

Page 21: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

DemoDemo

Page 22: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Message-TransformationenMessage-Transformationen

Bearbeitung einzelner Events via SMTsBearbeitung einzelner Events via SMTs

Use Cases:

ExtraktionKonvertierungRouting

Anwendbar auf Source- oder Sink-Seite

Verfügbar in Debezium:

Logical Table RouterEvent Flattening SMT

@gunnarmorling#Debezium

Page 23: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

DemoDemo

Page 24: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

AusblickAusblick

Debezium 0.9

Weiterentwicklung Oracle und SQL Server

Alternative zu XStreams für Oracle

Debezium 0.x

Installation via OpenShift-ServicekatalogReactive Streams-SupportCaching via Infinispan

Debezium 1.x

 Standalone Server, Support für Kinesis, Pulsar etc.Event-Aggregation, Bausteine für deklarativen CQRS-Support

@gunnarmorling#Debezium

Page 25: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

ZusammenfassungZusammenfassung

Debezium: CDC für diverse DBs

Transparentes Aufsetzen von Change Data Streams

Funktioniert zuverlässig auch im Fehlerfall

Keine "Dual-Write"-ProblematikClients setzen nach Ausfall am letzten Offset fort

Alles ist Open Source (Apache License v2)

Contributions herzlich willkommen!

@gunnarmorling#Debezium

Page 26: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

Probiert es selber ausProbiert 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

Page 27: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium

RessourcenRessourcen

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

Page 28: Streaming von Datenbankänderungen mit Debezium fileAgenda Use Cases für Change Data Streams Change Data Streams erstellen Change Data Capture mit Kafka (Connect) Debezium Demo #Debezium