# Kafka Tutorial

Die Open-Source-Software [Apache Kafka](https://www.ionos.de/digitalguide/server/knowhow/apache-kafka/ "Apache Kafka") zählt zu den besten Lösungen zur Speicherung und Verarbeitung von Datenströmen. Die **Messaging- und Streaming-Plattform**, die unter der Apache-2.0-Lizenz steht, überzeugt durch Fehlertoleranz, hervorragende Skalierbarkeit sowie eine hohe Lese- und Schreibgeschwindigkeit. Basis dieser für Big-Data-Anwendungen überaus interessanten Merkmale ist ein Rechnerverbund (Cluster), der es ermöglicht, **Daten verteilt zu speichern und zu replizieren**. Vier verschiedene Schnittstellen ermöglichen die Kommunikation mit dem Cluster, wobei ein einfaches [TCP-Protokoll](https://www.ionos.de/digitalguide/server/knowhow/tcp-vorgestellt/ "TCP vorgestellt") als Verständigungsgrundlage dient.

In diesem Kafka-Tutorial sollen die ersten Schritte mit der in Scala geschriebenen Anwendung erläutert werden – beginnend mit der **Installation von *Kafka*** und der **für die Nutzung erforderlichen Software *Apache ZooKeeper***.

## Voraussetzungen für die Nutzung von Apache Kafka

Um einen leistungsfähigen Kafka-Cluster betreiben zu können, benötigen Sie die passende Hardware. Das Entwickler-Team empfiehlt den Einsatz von **Intel Xeon Maschinen** mit Quad-Core und 24 Gigabyte Arbeitsspeicher. Ganz prinzipiell benötigen Sie **ausreichend Speicher**, um jederzeit die Lese- und Schreibzugriffe aller Anwendungen zwischenspeichern zu können, die aktiv auf den Cluster zugreifen. Da insbesondere der hohe Datendurchsatz zu den Vorzügen von *Apache Kafka* zählt, ist auch die Wahl der passenden Festplatten von enormer Wichtigkeit. Die Apache Software Foundation empfiehlt **SATA-Festplattenlaufwerke** (8 x 7200 UpM) – hinsichtlich der Vermeidung von Leistungsengpässen gilt der Grundsatz: Je mehr Festplatten, desto besser.

**Auch hinsichtlich der Software müssen einige Voraussetzungen erfüllt werden**, um *Apache Kafka* für das Management eingehender und ausgehender Datenströme nutzen zu können. Bei der Wahl des Betriebssystems sollten Sie beispielsweise ein **UNIX-System** wie *Solaris* oder eine Linux-Distribution bevorzugen, da Windows-Plattformen nur eingeschränkt unterstützt werden. Da *Apache Kafka* in der nach Java kompilierenden Sprache Scala geschrieben ist, muss außerdem eine möglichst aktuelle Version des [Java SE Development Kits (JDK)](https://www.oracle.com/technetwork/java/javase/downloads/index.html "oracle.com: JDK im Downloadcenter") auf Ihrem System installiert sein. Selbiges enthält unter anderem die Java-[Laufzeitumgebung](https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-eine-laufzeitumgebung/ "Was ist eine Laufzeitumgebung?"), die für das Ausführen von Java-Anwendungen benötigt wird. Eine weitere Pflichtkomponente ist der Service [*Apache ZooKeeper*](https://zookeeper.apache.org/ "Offizielle Projektseite von Apache ZooKeeper"), der die Synchronisation verteilter Prozesse ermöglicht.

## Apache-Kafka-Tutorial: So installieren Sie Kafka, ZooKeeper und Java

Welche Software-Komponenten erforderlich sind, haben wir im vorangegangenen Teil dieses Kafka-Tutorials erklärt. Sofern sie nicht bereits auf Ihrem System eingerichtet ist, beginnen Sie am besten mit der Installation der **Java-Laufzeitumgebung**. Viele neuere Versionen von Linux-Distributionen – wie *Ubuntu*, das in diesem Apache-Kafka-Tutorial beispielhaft als Betriebssystem dient (Version 17.10) – haben mit OpenJDK bereits eine kostenfreie JDK-Implementierung im **offiziellen Pakete-Repository**. Sie können das Java-Kit also ganz einfach über dieses installieren, indem Sie Sie folgenden Befehl in das Terminal eingeben:

```none
sudo apt-get install openjdk-8-jdk
```

Direkt im Anschluss an die Java-Installation fahren Sie mit der Installation des Prozess-Synchronisations-Dienstes ***Apache ZooKeeper*** fort. Auch für diesen hält das Ubuntu-Paketverzeichnis ein einsatzfertiges Paket bereit, das sich folgendermaßen über die Kommandozeile ausführen lässt:

```none
sudo apt-get install zookeeperd
```

Mit einem weiteren Befehl können Sie anschließend überprüfen, ob der **ZooKeeper-Dienst aktiv** ist:

```none
sudo systemctl status zookeeper
```

Läuft Apache *ZooKeepe*r, sieht das Ausgaberesultat wie folgt aus:

[![Bild: Ubuntu-Terminal: Rückmeldung des aktiven ZooKeeper-Services](https://www.ionos.de/digitalguide/fileadmin/_processed_/8/e/csm_rueckmeldung-zookeeper-services_dca1d369a5.webp "Ubuntu-Terminal: Rückmeldung des aktiven ZooKeeper-Services")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2019/rueckmeldung-zookeeper-services.jpg) Unter dem Eintrag „Active“ erfahren Sie, ob und seit wann ZooKeeper aktiv ist.       Läuft der Synchronisationsservice nicht, können Sie ihn jederzeit mit diesem Befehl starten:

```none
sudo systemctl start zookeeper
```

Damit *ZooKeeper* immer automatisch beim Systemstart ausgeführt wird, legen Sie zum Abschluss noch einen Autostart-Eintrag an:

```none
sudo systemctl enable zookeeper
```

Schließlich erstellen Sie noch ein **Benutzerprofil für Kafka**, das für die spätere Nutzung des Servers erforderlich ist. Öffnen Sie hierfür erneut das Terminal und geben Sie folgenden Befehl ein:

```none
sudo useradd kafka -m
```

Mithilfe des Passwort-Managers *passwd* fügen Sie dem Benutzer anschließend ein Passwort hinzu, indem Sie das folgende Kommando und anschließend das gewünschte Kennwort eintippen:

```none
sudo passwd kafka
```

Im nächsten Schritt gewähren Sie dem Benutzer „kafka“ sudo-Rechte:

```none
sudo adduser kafka sudo
```

Mit dem neu erstellen Benutzerprofil können Sie sich nun jederzeit einloggen:

```none
su - kafka
```

An dieser Stelle des Tutorials ist es an der Zeit, Kafka herunterzuladen und zu installieren. Es gibt eine Reihe vertrauenswürdiger Quellen, die sowohl ältere als auch aktuelle Versionen der Stream-Verarbeitungs-Software zum Download zur Verfügung stellen. Direkt aus erster Hand erhalten Sie die **Installationsdateien** beispielsweise über das [Downloadverzeichnis der Apache Software Foundation](http://www.apache.org/dist/kafka/ "Kafka-Verzeichnis auf apache.org"). Es ist sehr empfehlenswert, mit einer **aktuellen Kafka-Version** zu arbeiten, weshalb Sie den folgenden Download-Befehl vor der Eingabe in das Terminal unter Umständen entsprechend anpassen müssen:

```none
wget http://www.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz
```

Da es sich bei der heruntergeladenen Datei um eine komprimierte Datei handelt, entpacken Sie diese im nächsten Schritt:

```none
sudo tar xvzf kafka_2.12-2.1.0.tgz --strip 1
```

Mithilfe des Parameters „--strip 1“ sorgen Sie dafür, dass die extrahierten Dateien direkt im Verzeichnis „**~/kafka“** gespeichert werden. Andernfalls würde Ubuntu auf Basis der in diesem Kafka-Tutorial verwendeten Version alle Dateien im Verzeichnis „**~/kafka/kafka\_2.12-2.1.0“** ablegen. Voraussetzung ist, dass Sie zuvor mithilfe von mkdir ein Verzeichnis mit dem Namen „kafka“ erzeugt haben und in dieses gewechselt sind (via „cd kafka“).

## Kafka: Tutorial zur Einrichtung des Streaming- und Messaging-Systems

Nachdem Sie nun Apache Kafka sowie die Java-Laufzeitumgebung und ZooKeeper installiert haben, können Sie den Kafka-Service prinzipiell jederzeit ausführen. Bevor Sie dies tun, sollten Sie jedoch noch ein paar kleine **Konfigurationen** vornehmen, damit die Software optimal für die bevorstehenden Aufgaben eingestellt ist.

### Löschen von Topics freischalten

Kafka erlaubt im **Standard-Set-up nicht, Topics – also die Speicher- und Kategorisierungseinheiten eines Kafka-Clusters – zu löschen**, was sich jedoch problemlos über die Kafka-Konfigurationsdatei *server.properties* ändern lässt. Sie öffnen diese Datei, die sich im Ordner „config“ befindet, mit dem folgenden Terminal-Befehl im Standard-Texteditor *nano*:

```none
sudo nano ~/kafka/config/server.properties
```

Am Ende dieser Konfigurationsdatei fügen Sie nun einen neuen Eintrag hinzu, der das **Löschen von Kafka-Topics freischaltet**:

```none
delete.topic.enable=true
```

[![Bild: Kafka-Konfigurationsdatei server.properties im nano-Editor](https://www.ionos.de/digitalguide/fileadmin/_processed_/4/3/csm_kafka-konfigurationsdatei-server-properties_1c450a6194.webp "Kafka-Konfigurationsdatei server.properties im nano-Editor")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2019/kafka-konfigurationsdatei-server-properties.jpg) In der Konfigurationsdatei können Sie auch diverse weitere Einstellungen wie zum Beispiel den TCP-Port (Standard: 2181), über den ZooKeeper läuft, ändern.       ---

### Tipp

Vergessen Sie nicht, den neuen Eintrag in der Kafka-Konfigurationsdatei zu **speichern**, bevor Sie den *nano*-Editor wieder schließen!

---

### .service-Dateien für ZooKeeper und Kafka anlegen

Im nächsten Schritt dieses Kafka-Tutorials geht es darum, Unit-Dateien für *ZooKeeper* und *Kafka* zu erstellen, die es ermöglichen, **gewöhnliche Aktionen** wie das Starten, Beenden oder Neustarten der beiden Dienste passend zu anderen Linux-Services auszuführen. Dafür ist es notwendig, für beide Anwendungen *.service*-Dateien für den Sitzungsmanager *systemd* zu erstellen und einzurichten.

#### So erstellen Sie die passende ZooKeeper-Datei für den Ubuntu-Sitzungsmanager systemd

Erstellen Sie zunächst die Datei für den Synchronisationsservice *ZooKeeper*, indem Sie folgenden Befehl in das Terminal eingeben:

```none
sudo nano /etc/systemd/system/zookeeper.service
```

Dadurch wird die Datei nicht nur erstellt, sondern auch gleich im nano-Editor geöffnet. Geben Sie dort nun folgende Zeilen ein und speichern Sie die Datei im Anschluss:

```none
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
```

Infolgedessen versteht *systemd*, dass *ZooKeeper* erst dann gestartet werden kann, wenn das **Netzwerk** und das **Dateisystem bereit** sind, was in der Sektion \[Unit\] definiert ist. Unter \[Service\] ist spezifiziert, dass der Sitzungsmanager für den **Start** bzw. den **Stopp von *ZooKeeper*** die Dateien *zookeeper-server-start.sh* bzw. *zookeeper-server-stop.sh* nutzen soll. Zudem ist ein **automatischer Neustart** für solche Fälle definiert, in denen der Service unvorhergesehen gestoppt wurde. Der \[Install\]-Eintrag reguliert, wann die Datei gestartet wird, wobei „multi-user.target“ der Standard-Wert für ein Mehrbenutzersystem (z. B. einen Server) ist.

#### Kafka-Datei für den Ubuntu-Sitzungsmanager systemd erstellen – so funktioniert‘s

Die *.service*-Datei für *Apache Kafka* erstellen Sie mit folgendem Terminal-Kommando:

```none
sudo nano /etc/systemd/system/kafka.service
```

Anschließend kopieren Sie folgenden Inhalt in die neue Datei, die bereits im nano-Editor geöffnet wurde:

```none
[Unit]
Requires=zookeeper.service
After=zookeeper.service
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
```

Im \[Unit\]-Bereich dieser Datei ist die **Abhängigkeit des *Kafka*-Services von *ZooKeeper*** spezifiziert. Somit ist sichergestellt, dass auch der Synchronisationsdienst startet, wenn die *kafka.service*-Datei ausgeführt wird. Unter \[Service\] sind die Shell-Dateien *kafka-server-start.sh* und *kafka-server-stop.sh* für das **Starten** bzw. **Beenden** des **Kafka-Servers** eingetragen. Der **automatische Neustart** nach vorangegangenem Verbindungsabbruch sowie der **Mehrbenutzersystem**-Eintrag sind in dieser Datei ebenfalls zu finden.

[![Bild: Ubuntu-Terminal: Datei kafka.service im nano-Editor](https://www.ionos.de/digitalguide/fileadmin/_processed_/1/0/csm_ubuntu-terminal-kafka-service_d8f51d881a.webp "Ubuntu-Terminal: Datei kafka.service im nano-Editor")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2019/ubuntu-terminal-kafka-service.jpg) Schlüssel wie „ExecStart“ enthalten die Befehle für den jeweiligen Dienst. Innerhalb der .service-Dateien sind sie durch Großschreibung (Wortanfang und im Wortinnern) gekennzeichnet.       ###  Kafka: Erster Start und Erstellen eines Autostart-Eintrags

Nachdem Sie die Sitzungsmanager-Einträge für *Kafka* und *ZooKeeper* erfolgreich angelegt haben, können Sie Kafka nun folgendermaßen starten:

```none
sudo systemctl start kafka
```

Das Programm *systemd* verwendet standardmäßig ein zentrales Protokoll bzw. Journal, in das automatisch alle **Log-Meldungen** geschrieben werden. Aufgrund dieses Umstands können Sie ganz einfach überprüfen, ob der Kafka-Server wie gewünscht gestartet wurde:

```none
sudo journalctl -u kafka
```

Der **Output** sollte in etwa folgendermaßen aussehen:

[![Bild: Ubuntu-Terminal: Auszug aus dem systemd-Journal](https://www.ionos.de/digitalguide/fileadmin/_processed_/d/8/csm_systemd-journal_6ef8d71ebd.webp "Ubuntu-Terminal: Auszug aus dem systemd-Journal")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2019/systemd-journal.jpg) Der Sitzungsmanager systemd ist seit Ubuntu 15.04 fester Bestandteilt des Linux-Betriebssystems, weshalb alle benötigten Komponenten in aktuellen Versionen standardmäßig installiert sind.       Funktioniert der manuelle Start von *Apache Kafka*, aktivieren Sie zum Abschluss noch den **automatischen Start** im Rahmen des System-Boots:

```none
sudo systemctl enable kafka
```

## Apache-Kafka-Tutorial: Erste Schritte mit Apache Kafka

Um *Apache Kafka* zu testen, soll an dieser Stelle des Kafka-Tutorials eine erste Nachricht mithilfe der Messaging-Plattform verarbeitet werden. Zu diesem Zweck benötigen Sie einen **Producer** und einen **Consumer** – also eine Instanz, die das Schreiben und Veröffentlichen von Daten in Topics ermöglicht, sowie eine Instanz, die Daten eines Topics auslesen kann. Zuerst erzeugen Sie allerdings das **Topic**, das in diesem Fall den Namen **TutorialTopic** erhalten soll. Da es sich um ein einfaches Test-Topic handelt, soll es lediglich eine einzelne Partition sowie eine einzige Replik enthalten:

```none
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic
```

Im zweiten Schritt erstellen Sie einen Producer, der dem gerade kreierten Topic die erste Beispiel-Nachricht „**Hallo Welt!**“ hinzufügt. Zu diesem Zweck nutzen Sie das **Shell-Skript** *kafka-console-producer.sh*, das den Hostnamen und den Port des Servers (im Beispiel: Kafka-Standardpfad) sowie den Namen des Topics als Argumente erwartet:

```none
echo "Hallo Welt!" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
```

Mithilfe des Skripts *kafka-console-consumer.sh* erzeugen Sie abschließend einen Kafka-Consumer, der **Nachrichten von TutorialTopic verarbeitet und wiedergibt**. Als Argumente werden wiederum Hostname und Port des Kafka-Servers sowie der Topic-Name benötigt. Zudem wird das Argument „--from-beginning“ angehängt, damit die „Hallo Welt!“-Nachricht, die in diesem Fall noch vor dem Start des Consumers veröffentlicht wurde, auch tatsächlich von diesem verarbeitet werden kann:

```none
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning
```

Als Folge präsentiert das Terminal die **„Hallo Welt!”-Nachricht**, wobei das Skript kontinuierlich weiterläuft und auf weitere Nachrichten wartet, die zu dem Test-Topic veröffentlicht werden. Sorgen Sie also durch den Producer in einem anderen Terminalfenster für **weiteren Daten-Input**, sollten Sie diese ebenfalls im Terminalfenster sehen, in dem das Consumer-Skript ausgeführt wird.

[![Bild: Ubuntu-Terminal: Manueller Start eines Kafka-Consumers](https://www.ionos.de/digitalguide/fileadmin/_processed_/e/c/csm_start-kafka-consumers_4a9c2df347.webp "Ubuntu-Terminal: Manueller Start eines Kafka-Consumers")](https://www.ionos.de/digitalguide/fileadmin/DigitalGuide/Screenshots_2019/start-kafka-consumers.jpg) Laufende Consumer-Skripte können Sie jederzeit durch die Tastenkombination \[Strg\] + \[C\] stoppen.


This is a markdown version of: [https://www.ionos.de/digitalguide/server/konfiguration/apache-kafka-tutorial/](https://www.ionos.de/digitalguide/server/konfiguration/apache-kafka-tutorial/) for AI/LLM consumption.