In vielen Projekten fragen wir uns, welchen Ansatz wir zur Datensynchronisation zwischen zwei Anwendungen verwenden sollen. Oft müssen wir uns zwischen dem klassischen ETL-Ansatz und einem Event-basierten Ansatz mit Apache Kafka oder Azure Event Hubs entscheiden. Event Streaming (ES) wirbt in der Regel mit seiner Skalierbarkeit. Für uns stellte sich jedoch die Frage, ob der Einsatz auch bei kleinen Datenmengen sinnvoll ist. Zum Beispiel, um Stammdaten zwischen mehreren Anwendungen zu synchronisieren. Wir haben daher eine Evaluation durchgeführt, um zu erfahren, wie sich Integrationslösungen für Anwendungsfälle mit kleineren Datenmengen einsetzen lassen.
In diesem Beitrag wird auf die Ergebnisse einer Evaluierung zwischen ETL und Event Streaming eingegangen und eine Empfehlung ausgesprochen, bei welchen Anforderungen welcher Ansatz angewendet werden sollte.
Grundlagen zu ETL und Event Streaming
ETL ist ein gängiger Ansatz zur Datenintegration, bei dem Daten aus verschiedenen Quellen extrahiert, transformiert (Format- und Datenumwandlungen) und dann in ein zentrales Zielsystem geladen werden. Dieser Ansatz eignet sich gut zur Erfassung und Verarbeitung großer Mengen historischer Daten für Analysen und Berichte.
Im Gegensatz zu ETL, bei dem die Daten regelmäßig nach einem festen Zeitplan übertragen werden, werden beim Event Streaming (ES) die Daten “kontinuierlich” in Form von Ereignissen übertragen. Ein Ereignis kann z.B. das Anklicken eines Buttons sein, wodurch ein Event erzeugt wird. Dieses Ereignis wird zur weiteren Verarbeitung an interessierte Anwendungen weitergeleitet und enthält Informationen über das eingetretene Ereignis.
Die Implementierung kann mithilfe von Azure Event Hubs zur Verteilung und einer Azure Function zur Verarbeitung der Events erfolgen.
Ergebnisse der Evaluierung (ETL vs. Event Streaming)
Die Evaluierung erfolgte anhand von 4 Bewertungskriterien:
- Implementierungsaufwand
- Kosten
- Performance
- Modifizierbarkeit
Implementierungsaufwand
Der Implementierungsaufwand ist bei ETL erheblich geringer. Event Streaming benötigt anfänglich mehr Infrastruktur als ETL, weswegen bei einfachen Anwendungsfällen ohne besondere Anforderungen an die Performance ETL besser geeignet ist, um Implementierungsaufwand und damit Entwicklungskosten zu sparen. ETL kann allerdings bei einer Vielzahl von Anwendungen, die untereinander synchronisiert werden müssen, zu einem sehr hohen Implementierungsaufwand führen, wenn zwischen jeder Anwendung eine Verbindung hergestellt werden muss.
Kosten
Die variablen Kosten für den Betrieb der Lösungen machen bei kleinen Datenmengen nur einen geringen Anteil an den Implementierungskosten aus. Bei ETL-Lösungen ist mit monatlichen Kosten von wenigen Euro zu rechnen. Auch die Nutzung von Azure Event Hubs für ES ist mit ~20 Euro pro Monat relativ gering. Allerdings weist ETL in diesem Punkt geringere Entwicklungs- und variable Kosten auf.
Im Hinblick auf die Performance hat ES Vorteile. ETL-Jobs werden typischerweise in Zeitintervallen ausgeführt. Dies führt zu inkonsistenten Datenbeständen zwischen diesen Intervallen. Diese zeitlichen Intervalle liegen in der Regel zwischen einer Minute und einem Tag, abhängig von der jeweiligen Anwendung. Häufigere Synchronisierungen sind selten und werden auch von Werkzeugen wie der Azure Data Factory nicht unterstützt. Ereignisse werden nahezu in Echtzeit verarbeitet. In Tests wurde mit ES eine durchschnittliche Synchronisationszeit von 5 Sekunden zwischen der Erstellung einer Ressource in einer Anwendung und der Speicherung der Ressource in der Datenbank eines Drittsystems gemessen. Wobei hier der großteil der Zeit auf die Erstellung des Events innerhalb des Quellsystems anfiel. Die reine Verarbeitungszeit wird um die 50ms betragen.
Modifizierbarkeit
Hinsichtlich der Modifizierbarkeit hat ES ein größeres Potenzial als ETL, da einerseits die Skalierbarkeit mit ES sehr gut möglich ist und andererseits Probleme wie die Änderung eines Datenformats mit ES einfacher zu implementieren sind. ETL ist in diesen Fällen oft sehr stark von einer API abhängig. ES hat durch die Speicherung von Events die Möglichkeit, auch nachträglich für das Reporting Daten über gelöschte Ressourcen zu liefern oder Daten zu ergänzen.
Fazit der Evaluierung von ETL vs. Event Streaming
Die Betrachtung dieser Bewertungskriterien lässt keine generelle Aussage darüber zu, welcher Ansatz nun generell zu bevorzugen ist. ETL hat Vorteile bei den Kosten und beim Implementierungsaufwand. Daher würde ich im Normalfall empfehlen, dass ETL die Standardlösung bleibt. Die zusätzliche Infrastruktur und der damit verbundene Implementierungsaufwand wird sich in vielen Projekten nicht rechnen.
Event Streaming wird als sehr performante und skalierbare Technologie beworben und ist es ohne Frage auch. Allerdings wird diese Performance in vielen Projekten nicht benötigt werden, weshalb Event Streaming meiner Meinung nach ein Sonderfall bleiben sollte. Auch hier sollte der Grundsatz gelten:
Don´t be afraid to use the best tool for the job, even if its uncool, old-fashioned or unusual.