14. Mai 2024 von Christian Del Monte
Datenänderungen im Griff haben mit Change Data Capture
In einem verteilten Softwaresystem stellen Datenänderungen immer eine Herausforderung dar. Wie ist es möglich, die Änderungshistorie von Daten, die sich in einem Teil des Systems befinden, zu verfolgen, um angeschlossene Datenspeicher in anderen Teilsystemen zu synchronisieren? Eine Antwort auf diese Frage bietet Change Data Capture (CDC).
CDC ist eine Technik, die alle Datenänderungen in einer Datenbank erfasst, sammelt und für die Übertragung und Replikation in andere Systeme aufbereitet, entweder als Batch-Prozess oder als Stream. Ein anschauliches Beispiel ist ein System mit einer zentralen Datenbank und einem zugehörigen Suchindex. CDC stellt die Synchronisation zwischen beiden sicher, indem Änderungen erfasst, protokolliert und in der gleichen Reihenfolge auf den Suchindex angewendet werden, so dass die Daten am Ende des Prozesses abgeglichen sind.
CDC und Informatica
In den letzten zehn Jahren hat CDC zunehmend an Bedeutung gewonnen, weshalb viele Softwarehersteller spezielle CDC-Lösungen entwickelt haben. Informatica bietet mit Produkten wie PowerExchange und PowerCenter eine Plattform für die Erfassung, Transformation und Integration von Daten. PowerExchange fungiert als Erfassungsagent, der Datenänderungen identifiziert und durch Techniken wie das Lesen von Datenbanktransaktionsprotokollen erfasst, um die Systemleistung zu schonen. PowerCenter verarbeitet diese Daten durch Transformationen und Mappings weiter, bevor sie an die Zielsysteme weitergeleitet werden. Diese Systeme können optional mit Streaming-Plattformen wie Apache Kafka integriert werden. Ein Beispiel hierfür wäre ein Versicherungsunternehmen, das Informatica PowerExchange und PowerCenter verwendet, um Datenänderungen in einer PostgreSQL-Datenbank zu erfassen und an Kafka zu senden.
- 1. Datenerfassung mit PowerExchange: PowerExchange verbindet sich mit der PostgreSQL-Datenbank und überwacht Transaktionsprotokolle, um Änderungen wie neue Policen und Zahlungen in Echtzeit zu erfassen.
- 2. Datenverarbeitung in PowerCenter: Die erfassten Änderungen werden an PowerCenter übermittelt, wo sie validiert, normalisiert und mit weiteren Informationen angereichert werden. PowerCenter implementiert auch spezifische Geschäftsregeln wie die Aktualisierung des Vertragsstatus.
- 3. Veröffentlichung auf Kafka: Die transformierten Daten werden als strukturierte Nachrichten an Kafka gesendet, das als zentrale Plattform für die Verteilung dieser Daten an verschiedene interne Verbraucher dient.
- 4. Datenkonsum: Verschiedene Systeme abonnieren relevante Kafka-Themen, um die Daten zu konsumieren und ihre Systeme zu aktualisieren. Beispielsweise verarbeitet das Schadensmanagementsystem neue Schadensfälle, während Analyse-Dashboards Leistungsmetriken in Echtzeit aktualisieren.
Dieser Ansatz ermöglicht es dem Versicherungsunternehmen, eine effiziente und genaue Synchronisierung zwischen den Systemen aufrechtzuerhalten, die Zeit zwischen der Datenerfassung und der Verfügbarkeit für die Analyse zu verkürzen und die Reaktionsfähigkeit sowie die betriebliche Effizienz durch den Zugriff auf aktuelle und genaue Daten in Echtzeit zu verbessern. Darüber hinaus verbessern die Verarbeitungs- und Integrationsfähigkeiten von Informatica die Datenqualität und die Einhaltung von Unternehmensrichtlinien vor der Verteilung.
CDC mit Kafka
Die CDC-Lösung von Informatica verwendet proprietäre Software für einen zentralisierten Ansatz, wobei PowerCenter die Transformationen und Datenflüsse zentral verwaltet. Für eine dezentrale, Open-Source-basierte Lösung eignet sich hingegen Apache Kafka. Mit Hilfe von Konnektoren wie Debezium unterstützt Kafka auch CDC: Debezium erfasst Änderungen aus den Transaktionslogs der Quelldatenbanken und leitet sie an Kafka weiter. Dort werden die Daten mittels Kafka Streams und KSQL normalisiert und angereichert, was eine skalierbare Echtzeitverarbeitung ermöglicht. Die verarbeiteten Daten werden dann an relevante Topics verteilt und von den abonnierten Systemen genutzt.
Das oben genannte Beispiel einer Versicherungsgesellschaft kann wie folgt für eine Kafka-basierte Lösung angepasst werden, um Datenänderungen effektiv zu überwachen, zu transformieren und zu verteilen. Das System verwendet Apache Kafka, Debezium für Kafka Connect und Kafka Streams:
- 1. Datenerfassung mit Debezium und Kafka Connect: Debezium ist mit der PostgreSQL-Datenbank verbunden, um Änderungen in den Transaktionsprotokollen in Echtzeit zu erfassen und an Kafka zu liefern.
- 2. Datenverarbeitung mit Kafka Streams: Die erfassten Änderungen werden in Echtzeit verarbeitet, einschließlich Formatvalidierung, Normalisierung und Anreicherung der Daten. Kafka Streams kann spezifische Geschäftsregeln implementieren, wie z.B. die Aktualisierung des Vertragsstatus.
- 3. Versand in Kafka Topics: Transformierte Daten werden als strukturierte Nachrichten in Kafka Topics versendet und verteilt.
- 4. Datenkonsum: Verschiedene Systeme abonnieren diese Topics und aktualisieren ihre Datenbanken und Anwendungen, zum Beispiel das Schadensmanagementsystem, das Schadensfälle schneller bewertet und löst, und Analyse-Dashboards, die Leistungsmetriken in Echtzeit aktualisieren.
Die CDC- Lösungen Informatica und Kafka im Vergleich
Beim Vergleich der beiden CDC-Lösungen werden einige Unterschiede deutlich:
- Auswirkungen auf das Quellsystem: Beide verwenden einen Log-basierten Ansatz, um die Auswirkungen zu minimieren, aber ihre Integration in das Quellsystem und der Overhead können je nach spezifischer Implementierung und Datenbank variieren.
- Datenverarbeitung: Informatica bietet umfassendere Datentransformationsmöglichkeiten, die auf komplexe Geschäftslogik ausgerichtet sind. Im Gegensatz dazu ist Kafka für die Verarbeitung von Ereignisströmen in Echtzeit mit einfacheren Transformationen optimiert.
- Architektur und Skalierbarkeit: Kafka ist von Grund auf verteilt und für die Verarbeitung großer Datenmengen in Echtzeit ausgelegt. Informatica verwendet eine stärker zentralisierte Architektur, die für traditionelle und komplexe Datenintegrationsszenarien geeignet ist.
- Schema Management: Kafka bietet mit der Schema Registry ein robustes System zur Verwaltung der Schema-Kompatibilität in Datenströmen. Informatica verwaltet das Schema durch die Definition von Mappings in PowerCenter, mit einem eher traditionellen und designorientierten Ansatz.
Die Entscheidung zwischen Informatica und Kafka hängt von den spezifischen technischen Anforderungen, der Komplexität der Transformationen, der vorhandenen Architektur und den Präferenzen für das Systemmanagement ab. Kafka bietet mit seiner dezentralen, horizontal skalierbaren Architektur, die große Datenmengen effizient verarbeiten kann, klare Vorteile in Bezug auf Skalierbarkeit und Ausfallsicherheit. Allerdings sind Kafka Streams und KSQL in erster Linie für die Verarbeitung von Ereignisströmen konzipiert und weniger für komplexe Geschäftslogik oder Batch-Transformationen geeignet. In solchen Fällen ist Informatica wahrscheinlich die bessere Wahl.
Best Practices
Obwohl CDC nützlich ist, müssen kritische Aspekte wie das Leistungsmanagement in Hochverfügbarkeitsumgebungen und das Management von Datenabweichungen berücksichtigt werden, die spezifische Maßnahmen erfordern.
Was den ersten Aspekt betrifft, so ist eine effiziente Verwaltung der Netzwerk- und Verarbeitungsressourcen in Systemen mit CDC von entscheidender Bedeutung. Es ist wichtig, die Infrastruktur so zu gestalten, dass Lastspitzen bei der Datenerfassung und -übertragung bewältigt werden können, ohne die Leistung des Quellsystems zu beeinträchtigen:
- Techniken wie Datenpartitionierung und effiziente Indizierung können Überlastungen erheblich reduzieren.
- Darüber hinaus kann der Einsatz von Lastverteilungstechniken zur gleichmäßigen Verteilung des Datenverkehrs und der Datenbankabfragen Engpässe verhindern. Dies ist besonders wichtig, wenn Daten gesammelt und gleichzeitig an mehrere Nutzer gesendet werden.
- Schließlich kann in Hochverfügbarkeitsumgebungen die Datenreplikation dazu beitragen, das Risiko von Datenverlusten zu verringern und die Leseleistung zu verbessern.
- Die Implementierung von synchroner oder asynchroner Replikation, abhängig von den Anforderungen an Konsistenz und Latenz, kann dazu beitragen, die Datenintegrität im gesamten System aufrechtzuerhalten.
Die Verwendung von Transaktionen, die CDC-Operationen in logische Arbeitseinheiten gruppieren, die entweder vollständig ausgeführt oder im Fehlerfall abgebrochen werden können, sowie die Durchführung regelmäßiger Datenintegritätstests und -validierungen, um sicherzustellen, dass die übertragenen Daten korrekt und vollständig sind, sind für das Management von Datenabweichungen von entscheidender Bedeutung. Darüber hinaus ist die Implementierung von Fehlererkennungsalgorithmen zur Identifizierung von Abweichungen in den übertragenen Daten, wie Prüfsummen oder Hashes, von entscheidender Bedeutung. Sobald Fehler erkannt werden, können automatische oder halbautomatische Korrekturmechanismen aktiviert werden, um die Korrektheit der Daten wiederherzustellen. Auch das Führen detaillierter CDC-Protokolle und die kontinuierliche Überwachung der Datenintegrität mit Hilfe von Telemetriewerkzeugen und Dashboards können sofortige Warnungen bei Anomalien liefern und helfen, mögliche Diskrepanzen schnell zu identifizieren und zu beheben.
Diese Maßnahmen erhöhen nicht nur die Belastbarkeit und Effizienz der CDC-Systeme, sondern stellen auch die Genauigkeit und Zuverlässigkeit der Daten sicher, wodurch das Risiko falscher Geschäftsentscheidungen auf der Grundlage ungenauer Daten minimiert wird.
Schlussfolgerungen
Change Data Capture ist eine effiziente Methode zur automatischen Synchronisierung von Datenänderungen in verteilten Softwaresystemen. Durch die Überwachung, Erfassung und Replikation von Änderungen fördert CDC die Datenkonsistenz über verschiedene Subsysteme hinweg. Eine gut durchdachte Planung und Implementierung von CDC kann dazu beitragen, die Datenkonsistenz zu verbessern, die betriebliche Effizienz zu erhöhen und somit die Reaktionsfähigkeit auf Kundenanforderungen und Marktveränderungen zu verbessern.