Wir bei isento finden es richtig und wichtig sich immer weiterzubilden und auf dem neuesten Stand der technologischen Entwicklung zu sein.
Umso besser, wenn dies sogar in den Rahmen eines Kundenprojekts passt.
Unser Kollege Thorsten arbeitet derzeit an einem Benachrichtigungssystem. Nach Prüfung der Möglichkeiten hat man sich für eine Umsetzung mit der Software Apache Kafka und der NoSQL Datenbank Apache Cassandra entschieden. Die Beiden befinden sich momentan in aller Munde und sind ein großes Trendthema in der Softwareentwicklung Oder wie man bei uns intern sagt: „Ein ganz heißer Scheiß auf dem Markt“. 😉

Doch warum genau ist das so? Wir schauen uns die Programme mal näher an und starten heute mit Apache Kafka:

Apache Kafka – Einführung

Apache Kafka wurde ursprünglich von LinkedIn für die Verarbeitung von rund 1,4 Milliarden Nachrichten pro Tag entwickelt. Der Fokus wurde dort auf die Analyse des Nutzerverhaltens mit einem hohen Durchsatz gelegt.

Kafka kann als Datenquelle für Event-Streaming-Anwendungen, als Message Broker und als verteiltes Messaging Log (Event-Sourcing) genutzt werden. Event-Streams können also gespeichert und wiederholt verarbeitet werden. Ebenso kann Kafka als Schnittstelle dienen, um Daten in Drittsysteme zu laden oder zu exportieren.

Es ist sozusagen ein Publish-Subscribe System zwischen Sender und Empfänger, welches Nachrichten in hoher Geschwindigkeit verarbeitet und in „Echtzeit“ verfügbar macht.

Kafka-Architektur

Die hohe Leistung von Kafka ist der Architektur geschuldet und erlaubt mehrere Möglichkeiten bei der Dimensionierung in der Infrastruktur. Die standardmäßige Unterteilung in Cluster mit einzelnen Knoten, den so genannten Brokern, ist möglich.

Welches aber dann alle Topics replizieren würde und so einen (unnötigen) höheren Ressourcenverbrauch darstellt. Oftmals sind aber einzelne Topics das Problem, in die einkommende Daten verteilt werden. In Kafka bestehen Topics aus mindestens einer Partition. Diese Anzahl an Partitionen kann erhöht werden, passend zur Anzahl bzw. Performance der Konsumenten, ohne die Redundanz auf anderen Topics zu erhöhen.

Ein weiterer Unterschied zu anderen Publish-Subscribe Systemen, sind die Messages die in ein Topic geschrieben werden. Der Aufbau einer Message ist vereinfacht { Key Value }-Paar. Neue Messages im Topic werden auf die bestehenden Partitionen verteilt und immer hinten angehängt, d.h. sie werden in der Reihenfolge gespeichert, in der sie geschrieben wurden. Die Zuordnung an die Partitionen erfolgt über den Key. Gleicher Key führt zu gleicher Partition.

Producer, Anwendungen die Daten schreiben, können eine Message in ein Topic stellen (publish), Consumer wiederum können diese aus dem Topic abrufen und lesen (subscribe). Consumer können sich auch als „Consumer Group“ zusammenschließen, um die Daten aus dem Topic zu lesen. Dabei garantiert die „Consumer Group“ bei den Consumern, dass die gleiche Message nicht mehrfach gelesen wird, falls diese von einem Consumer der Gruppe verarbeitet wurde. Innerhalb der Partition wird für die Consumer Group die Position der gelesenen Daten (Offset) gespeichert.

Nachrichten in Kafka werden üblicherweise über einen gewissen Zeitraum bereitgestellt, weshalb man auch vom Event-Log bei Kafka spricht. Wird diese so genannte „retention time“ überschritten oder ist der Speicher voll, löscht Kafka alte Nachrichten. Neben diesen normalen Topics gibt es die Möglichkeit der compacted Topics. Hier bleiben die Messages bestehen und unterliegen keiner Limitierung.

Die Vorteile von Apache Kafka

Die Plattform liefert das Komplettpaket für eine schnelle und effiziente Übertragung und Zwischenspeicherung von Daten und das auf eine vergleichsweise einfache Art und Weise. Das Ganze gepaart mit einer hohen Ausfalltoleranz bedingt durch die extreme Skalierbarkeit, ermöglicht sogar „Echtzeit“-Kommunikation zwischen Producer und Consumer.

Anwendung von Kafka

Kafka ist gerade im Umfeld von Big Data und Analytics ein geeignetes und immer öfter gesehenes System. Daten sind heutzutage eine wichtige Währung und mit Daten zu arbeiten und sie schnell zu verarbeiten kann einen großen Erfolgsfaktor darstellen.

Neben dem Echtzeit-Tracking von Aktivitäten auf Webseiten können auch die Datenkonsolidierung von verteilten Anwendungen oder der Transport von Metriken Anwendungsbeispiele sein.

Zunehmend wird Apache Kafka auch beim Maschinellen Lernen genutzt. So können Modelle in Echtzeit trainiert, überwacht und analysiert werden. Es können aber auch kundenspezifische Angebote unter Einbeziehung verschiedener Daten erstellt werden wie Kaufvorlieben, vorherige Käufe, Standort, etc.

Die Plattform ist somit eine vielseitige und vielversprechende Option, die es lohnt sich näher anzusehen. Im nächsten Blogbeitrag erfahrt ihr mehr zum Datenbanksystem Cassandra.