Was ist Kafka?

Apache Kafka ist eine verteilte Streaming-Plattform und wird benötigt um verschiedenste Datenströme zu verteilen. In dieser Hinsicht ist es sehr ähnlich zu normalen Message-Queues. Der wesentliche Vorteil von Kafka besteht aber darin, dass es zum einen die Datenströme speichern kann und dabei Fehlertolerant ist und zum anderen sehr hoch skalierbar und Ressourcensparend ist. (Siehe hier)

Ursprünglich wurde Kafka von linked.in entwickelt, ist aber seit 2012 unter Apache-Lizenz und damit Teil der Apache Software Foundation. Der prinzipielle Aufbau eines Kafka-Setups sieht wie folgt aus:

Kafka Basic - Page 1

Die Producer senden Nachrichten an Kafka. Um die Nachrichten „thematisch“ zu unterscheiden muss jeder Producer angeben zu welchem Topic die Nachricht gehört. Ist die Nachricht bei Kafka angekommen und gespeichert kann ein Consumer sie abgreifen. Dabei kann er sich einem oder mehreren Topics subscriben. Prinzipiell kann auch jeder Producer Nachrichten an verschiedene Topics schreiben und Consumer können ein oder mehrere Topics abgreifen. Zusätzlich kann die Kommunikation vom Producer zum Consumer synchron oder asynchron erfolgen. Im asynchronen Fall kann der Consumer sich auch entscheiden welche Nachrichten er erhalten möchte. Dazu muss er nur die id Nummer, genannt Offset, der Nachricht angeben und bekommt diese dann zugesendet.

Kafka benötigt zwingend Apache Zookeeper und wird deshalb auch immer damit ausgeliefert. Zookeeper kümmert sich um die Organisation der Server innerhalb des Kafka Clusters. Wie zum Beispiel welcher Server sich um welche Topics kümmert oder andere Server spiegelt. Fällt ein Server aus kümmert sich Zookeeper darum, dass klar ist welcher andere Server den Job übernimmt usw.

Use Cases

Wie schon eingangs erwähnt ist ein typischer Anwendungsfall für Kafka ähnlich zu Nachrichtensystemen wie RabbitMQ. Der Vorteil Kafkas liegt hier in der hohen Skalierbarkeit und Ausfallsicherheit. So nutzt Spotify Kafka um alle Logdateien aller Hosts abzugreifen und in Ihren Hadoop Cluster zu schicken. Auch Twitter nutzt Kafka in ähnlicher Weise, wobei sie auch den Fakt ausnutzen, dass Kafka Persistenz bietet. Für Twitter ist Kafka neben einer Message Queue auch ein Zwischenspeicher für mehrere Stunden, bevor sie die Daten über Apache Storm in Ihren Amazon Speicher legen.

Ein weiteres Beispiel wäre Datenverarbeitung die in mehreren Schritten abläuft, sogenanntes Pipelining. Man könnte den Inhalt von Websites crawlen und dies unter dem Topic Websites speichern. Dann werden diese Websites aufbereitet und unter einem neuen Topic gespeichert. Im Weiteren analysiert man diese aufbereiteten Websites und erstellt Topics zu den entsprechenden Themen und speichert sie entsprechend ab. Außerdem könnte man dann zu jeder Website auch das Themenspektrum abspeichern und abrufbereit halten. Und alles theoretisch in einem Kafka Cluster. In der Praxis wären allerdings meist noch andere Dienste Teil der Pipeline und es würden auch verschiedene unabhängige Kafka Cluster für verschiedene Aufgaben genutzt. So zum Beispiel bei Netflix, wo Kafka Teil des Echtzeit-Monitoring und der Event-Processing Pipeline ist oder Blizzard wo es Teil der Datacollection Pipeline ist.

 

Alle Beiträge von Martin Münn

Schreibe einen Kommentar