10 Tools zur Real-Time Analytics von Apache Kafka-Topics
Apache Kafka hat sich im Big-Data-Bereich dabei als Quasi-Standard für Event Hubs durchgesetzt. Mit hoher Geschwindigkeit persistiert es immer schneller eintreffende Events sicher in Topics. Höher, Schneller, Stärker – das Motto der Olympischen Spiele gilt auch für die Ansprüche an moderne Datenanalyse.
Immer schneller soll das Datengold in den Topics geschürft werden. Die Daten sollen gefiltert, angereichert, gejoined und aggregiert werden und das möglichst in Echtzeit.
Anforderungen an Real-Time-Analytics Tools
Hoch sind die Anforderungen an die Werkzeuge. Die Thematik ist alles andere als trivial. Wir haben es zu tun mit (potenziell) gigantischen Datenmengen und erwarten dennoch:
- Horizontale Skalierbarkeit bis in Big-Data-Bereiche
- Ausfallsicheren 7×24 Betrieb
- Echtzeit-Analysen
- Exactly Once Garantie
- Event-Time Analysen
- Windowing
- Watermarks
- Handling von Out-of-Order Events
- Aggregationsfunktionen
- Machine Learning auf Streams beispielsweise für predictive Maintenance.
Die Tool-Palette für Apache Kafka als Quelle wächst und damit die Qual der Wahl.
Real-Time Analytics Tools der Kafka Community
Begonnen hat Apache Kafka ja als hochperformanter und hoch skalierbarer Event-Hub, und wird je nach Sichtweise auch als Message Queue bezeichnet. Das Streaming-API kamen relativ spät dazu und noch jünger ist ksqlDB.
Das Kafka-Streams API hat mit seinen Features mächtig zugelegt. Kein zusätzliches Cluster wird benötigt. Input und Output der Analysen sind jeweils Topics. Das API gibt’s für Java und Scala. Wer nicht in ein Topic schreiben möchte, sucht nach einem Apache Kafka Connector für die gewünschte Datensenke.
Mit ksqlDB eröffnet sich gar die Möglichkeit, die Topics mit SQL-artigen Befehlen zu analysieren. ksqlDB ist relativ neu und gerade bei komplexen SQL-Abfragen mit vielen Joins und Aggregatfunktionen noch etwas umständlich zu bedienen. Ein Werkzeug, das sicher noch handlicher wird.
Die flexiblen Klassiker unter den Real-Time Analytics Tools
Ein Klassiker unter den Stream Analytics Engines ist Apache Spark. Es erlaubt sowohl Batch-Analysen auf einer Vielfalt von Formaten als auch Stream Analytics mit mannigfaltigen Datenquellen. Eine davon ist Apache Kafka.
Apache Spark ist sicher eine der ausgereiften Möglichkeiten. Die Integration von SQL, auch auf Streams, ist deutlich einfacher zu Handhaben. Machine Learning Modelle können mit Spark trainiert und/oder auf Streams deployes werden. Das ermöglicht beispielsweise für Predictive Maintanance, also vorausschauende Wartung. Spark GraphX ist gar eine Big-Data Graph Processing Engine. Zudem können die Ergebnisse der Stream-Analytics auf eine Vielzahl verschiedener Senken zur Weiterverarbeitung resp. Visualisierung geschrieben werden, Datenbanken, In-Memory-Stores und Topics.
Open Source Möglichkeiten zur Visualisierung findet man beispielsweise beim Apache Zeppelin oder beim Jupyter Lab. Spark bringt APIs für Scala, Java, Python und R.
Apache Flink entstand ursprünglich als Stream Analytics Engine, die Batch-Möglichkeiten kamen erst nachgelagert dazu. Die Unterschiede zu Spark liegen im Detail im Handling, in der Vielfalt der Features und auch in der Sprache der Foren. Flink wurde ursprünglich an der TU Berlin gestartet und ist mittlerweile von Alibaba aufgekauft worden. Die chinesisch-sprachigen Foren-Beiträge können ja glücklicherweise automatisch übersetzt werden. Interessant bei Flink ist auch die gute Integration mit Apache RocketMQ, einer Alternative zu Kafka als Event-Hub. Wie Flink wird auch die Open-Source-Community von RocketMQ von Alibaba getrieben.
Big Data Stream Analytics Engines eine ganze Reihe. Apache Beam ist so eine Art aufkommender Standard für Stream Analytics. So ähnlich, wie SQL ein Standard für relationale Datenbanken ist.
Apache Spark und Apache Flink sind Beam-Runner, sollen also den Beam-Standard erlauben. Ein weiterer Open-Source Beam-Runner ist Apache Samza, der auch Kafka-Topics lesen und schreiben kann. Im Vergleich zu Apache Spark bringt Samza deutlich weniger Features und ist vielleicht gerade deswegen für den einen oder anderen Use-Case eine interessante Alternative.
Streaming-taugliche Big Data Datenbanken
Neben diesen ‘klassischen’ Stream-Analytics Engines gibt es eine wachsende Zahl von real-time Analytics fähigen Datenbanken.
Apache Druid ist in der Entwicklung schon weit fortgeschritten. Die Daten können in statischen Quellen, wie auf HDFS oder Amazon S3 liegen oder eben in real-time Quellen wie Kafka oder Amazon Kinesis.
Die Analysen erfolgen batch oder real-time mit Hilfe von einer intuitiv bedienbaren GUI.
Auch andere Big-Data taugliche Datenbanken entwickeln sich in eine vergleichbare Richtung.
Apache Ignite versteht sich ist eine verteilte Datenbank für hochperformantes Rechnen. Das Data Streaming API erlaubt eine Anbindung an Kafka, aber auch an Flink, RocketMQ, Spark, Storm, MQTT-Quellen. In einer Evaluation ist es als Alternative ist Ignite sicher ein guter Kandidat in einer Evaluation.
Echtzeit-Auswertungen sind ja per se Zeitabhängig, erfolgen in Zeitintervallen. Und so liegt es nahe, dass Zeitreihen-Datenbanken für Echtzeit-Auswertungen heranzuziehen sind. Die Anbindung an Kafka kann mit dem Kafka Connect API erfolgen. Man benötigt ein Verbindungsstück zwischen Kafka und der Datenbank. Die Events werden aus dem Kafka-Topic in die Datenbank übertragen, meist als Key-Value Paare. Dort werden sie weiterverarbeitet. Redis ist ein beliebter Key-Value Store. Und kann als Zwischenspeicher für eine weitere Auswertung, resp. Visualisierung dienen.
InfluxDB wiederum ist beliebt als Zeitreihen-Datenbank. Echtzeitauswertungen erfolgen ja oft in Zeitintervallen und da bietet es sich an, die Auswertung in einer Time-Series-Database wie Influxdb vorzunehmen.
Auch für Hazelcast gibt es einen Apache Kafka Connector und das Stream Processing API wird in Java eingebettet.
Zusammengefasst
- Apache Spark ist das bei weitem flexibelste Tool für Real-Time-Analysen. Dicht gefolgt von Apache Flink
- Die Apache Kafka-Community holt mit Kafka Streams und ksqlDB rasch auf in Bezug auf Datenbanalyse-Tools. Diese verarbeiten ausschließlich Kafka-Topics.
- Wer auf Apache Druid setzen möchte, baut damit eine real-time fähige Analyse Datenbank auf.
- Dank Kafka-Connect können auch weitere Tools wie Apache Ignite, Redis, InfluxDB und Hazelcast für die Analyse von Topics verwendet werden.
Meine Nr. 1 zur Analyse von Real Time Big Data
Das Gespann Kafka + Spark ist aus meiner Sicht momentan das schlagkräftigste und facettenreichste, wenn es um Echtzeitanalysen geht. Andere holen auf und es bleibt spannend.