Ich arbeite an einem Projekt, wo wir Echtzeit-Updates von Oracle auf eine Reihe von Systemen (Cassandra, Hadoop, Echtzeitverarbeitung, etc.) streamen müssen. Wir planen, Golden Gate zu verwenden, um die Änderungen von Oracle zu erfassen, sie an Kafka zu schreiben und dann verschiedene Zielsysteme das Ereignis von Kafka lesen zu lassen. Es gibt einige Design-Entscheidungen, die getroffen werden müssen:Oracle Change-Datenerfassung mit Kafka Best Practices
Welche Daten in Kafka auf Updates schreiben?
GoldenGate gibt Updates in Form von Datensatz-ID und aktualisiertem Feld aus. Diese Änderungen können auf eine von drei Arten in Kafka geschrieben werden:
Wo Datenumwandlung und Bereinigung durchführen?
Das Schema in der Oracle DB wird von einem CRM-Tool eines Drittanbieters generiert und ist daher nicht sehr einfach zu konsumieren - es gibt seltsame Feldnamen, Übersetzungstabellen usw. Diese Daten können in einem von (a) Quellsystem, (b) Kafka unter Verwendung der Stream-Verarbeitung, (c) jedes Zielsystem.
Wie kann die In-Order-Verarbeitung für parallele Verbraucher sichergestellt werden?
Kafka ermöglicht jedem Verbraucher, eine andere Partition zu lesen, wobei jede Partition garantiert in Ordnung ist. Themen und Partitionen müssen so ausgewählt werden, dass die Nachrichten in jeder Partition vollständig unabhängig sind. Wenn wir ein Thema pro Tabelle und einen Hash-Datensatz für Partitionen basierend auf record_id auswählen, sollte dies die meiste Zeit funktionieren. Was passiert jedoch, wenn ein neues untergeordnetes Objekt hinzugefügt wird? Wir müssen sicherstellen, dass es verarbeitet wird, bevor das übergeordnete Element seine Foreign_id verwendet