Apache Kafka ist eine verteilte Event-Streaming-Plattform, die 2011 bei LinkedIn entstand und seit 2012 Apache-Top-Level-Projekt ist. Kafka speichert Nachrichtenströme in Topics, die in Partitionen zerlegt und über mehrere Broker repliziert werden. Die Kommandozeilen-Werkzeuge liegen im bin/-Verzeichnis der Distribution und heißen auf Unix *.sh, unter Windows *.bat. Seit Kafka 2.8 läuft der Cluster im KRaft-Modus (KIP-500); Kafka 4.0 hat ZooKeeper vollständig entfernt.
Topics verwalten
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic events --partitions 3 --replication-factor 1
kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic events
kafka-topics.sh --bootstrap-server localhost:9092 --alter --topic events --partitions 6
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic events
--replication-factor darf die Anzahl der Broker nicht übersteigen; --describe zeigt Partitionen, Leader und Replikate.
Nachrichten senden und lesen
kafka-console-producer.sh --topic events --bootstrap-server localhost:9092
kafka-console-consumer.sh --topic events --from-beginning --bootstrap-server localhost:9092
Der Producer liest zeilenweise von der Standardeingabe. Mit --property parse.key=true --property key.separator=: lassen sich Schlüssel senden; beim Consumer zeigt --property print.key=true Schlüssel und Werte.
Consumer-Gruppen und Konfiguration
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group mein-group
kafka-configs.sh --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name events --add-config retention.ms=86400000
--describe --group zeigt den Lag (rückständige Nachrichten) jeder Partition. Mit kafka-configs.sh ändert man Laufzeit-Einstellungen wie die Aufbewahrungsdauer. Für Cluster-Spiegelung dient kafka-mirror-maker2.sh, für Stream-Verarbeitung die Bibliothek Kafka Streams.
Kafka ist der Datentransport in vielen Data-Pipelines: Spark Structured Streaming konsumiert Kafka direkt, und Hive lädt die Ströme in den Data Lake. Clients gibt es für viele Sprachen, etwa Python (confluent-kafka) oder Java. Die Skripte lassen sich klassisch per Bash automatisieren, Nachrichten werden häufig als JSON serialisiert.
Apache Spark ist ein In-Memory-Cluster-Computing-Framework, das 2009 am UC-Berkeley-AMPLab von Matei Zaharia als Forschungsprojekt begann und 2013 Apache-Top-Level-Projekt wurde. Spark verarbeitet Daten über RDDs (Resilient Distributed Datasets) und die höherwertigen DataFrame/Dataset-APIs; zugehörige Module sind Spark SQL, MLlib, GraphX und Structured Streaming. Die Firma Databricks wurde 2013 von den Berkeley-Gründern ins Leben gerufen.
Jobs einreichen
spark-submit --master yarn --deploy-mode cluster --executor-memory 4g --num-executors 10 app.py
spark-submit --master local[*] --class org.example.Main --jars helper.jar app.jar
spark-submit --master k8s://https://cluster:6443 --conf spark.kubernetes.container.image=spark:3.5 app.py
--master wählt den Cluster-Manager (local[*], yarn, k8s://, Standalone); --executor-memory und --num-executors steuern die Ressourcen. Für Python-Anwendungen übergibt man eine .py-Datei, für Scala/Java ein JAR mit --class.
Interaktive Shells und SQL
pyspark --master local[2]
spark-shell --master local[2]
spark-sql -e "SELECT count(*) FROM t" -f abfrage.sql
spark-sql -i init.sql
pyspark ist die Python-REPL, spark-shell die Scala-REPL, spark-sql führt Hive-kompatible SQL-Abfragen aus (-e für Inline, -f für Dateien). In pyspark arbeitet man typischerweise mit einer SparkSession:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("demo").getOrCreate()
df = spark.read.csv("daten.csv", header=True)
df.filter(df.alter > 30).groupBy("stadt").count().show()
df.cache()
df.cache() bzw. persist(StorageLevel.MEMORY_AND_DISK) hält Zwischenergebnisse im Speicher; die Web-UI läuft standardmäßig auf localhost:4040.
Spark ist die häufigste Ausführungs-Engine hinter Hive und konsumiert mit Structured Streaming direkt aus Kafka. Die APIs gibt es nativ für Scala, Java und Python; Abfragen formuliert man in SQL.
Apache Hive ist ein Data-Warehouse-System auf Basis von Apache Hadoop, das 2008 bei Facebook entstand und seit 2010 Apache-Top-Level-Projekt ist. Hive übersetzt die SQL-ähnliche Abfragesprache HiveQL in Jobs, die auf Hadoop-Clustern laufen — als Ausführungs-Engines dienen MapReduce, Tez oder Spark. Das Hive Metastore speichert Tabellenschemata in einer relationalen Datenbank; SerDes lesen und schreiben Formate wie Parquet, ORC, Avro und JSON.
Beeline: der moderne Client
beeline -u jdbc:hive2://localhost:10000/default -n nutzer -p passwort
beeline -u jdbc:hive2://localhost:10000/default -e "SHOW TABLES"
beeline -u jdbc:hive2://localhost:10000/default -f abfrage.sql
Beeline ist ein JDBC-Client (basiert auf SQLLine), der sich mit HiveServer2 verbindet — er ersetzt die alte Hive-CLI und unterstützt sowohl eingebetteten als auch Remote-Modus. Mit -e führt man Inline-SQL aus, mit -f ganze Skripte.
Typische HiveQL-Befehle
CREATE DATABASE IF NOT EXISTS analysen;
CREATE TABLE IF NOT EXISTS analysen.ereignisse (id INT, typ STRING)
PARTITIONED BY (tag STRING) STORED AS PARQUET;
LOAD DATA INPATH '/data/roh' INTO TABLE analysen.ereignisse PARTITION (tag='2026-08-30');
SELECT typ, count(*) FROM analysen.ereignisse WHERE tag='2026-08-30' GROUP BY typ;
INSERT OVERWRITE TABLE analysen.summary SELECT typ, count(*) FROM analysen.ereignisse GROUP BY typ;
SHOW TABLES;
DESCRIBE analysen.ereignisse;
Partitionen nach Datum sind in Hive Standard, damit Abfragen nur relevante Verzeichnisse scannen. Die Engine wählt man pro Session: SET hive.execution.engine=tez; (mögliche Werte mr, tez, spark). Das Metastore-Schema initialisiert man einmalig mit schematool -initSchema; Warehouse-Dateien liegen typischerweise unter /user/hive/warehouse im HDFS.
Hive-Tabellen liest auch Spark SQL über das gemeinsame Metastore; Streaming-Pipelines aus Kafka landen häufig in partitionierten Hive-Tabellen. Die Abfragesprache ähnelt stark SQL, das Metastore liegt oft in MySQL, und die Administration läuft über Bash-Skripte.
DynamoDB ist der verwaltete NoSQL-Dienst von Amazon Web Services: eine Key-Value- und Dokumentdatenbank, die sich ohne Serverbetrieb automatisch skaliert. Verwaltet wird sie über die AWS-CLI mit aws dynamodb ....
Tabellen anlegen und anzeigen
aws dynamodb create-table --table-name users --attribute-definitions AttributeName=id,AttributeType=S --key-schema AttributeName=id,KeyType=HASH --billing-mode PAY_PER_REQUEST
aws dynamodb list-tables
aws dynamodb describe-table --table-name users
Der Primärschlüssel besteht aus einem Partition Key (HASH) und optional einem Sort Key (RANGE). PAY_PER_REQUEST (On-Demand) rechnet pro Anfrage; alternativ reserviert man Provisioned Capacity in Read/Write Capacity Units (RCU/WCU).
Daten lesen und schreiben
aws dynamodb put-item --table-name users --item '{"id": {"S": "1"}, "name": {"S": "Ada"}, "jahr": {"N": "1843"}}'
aws dynamodb get-item --table-name users --key '{"id": {"S": "1"}}'
aws dynamodb update-item --table-name users --key '{"id": {"S": "1"}}' --update-expression "SET jahr = :j" --expression-attribute-values '{":j": {"N": "1844"}}'
aws dynamodb delete-item --table-name users --key '{"id": {"S": "1"}}'
Datenwerte werden typisiert angegeben (S String, N Number, M Map, L Liste). query arbeitet zwingend über den Primärschlüssel, scan liest die ganze Tabelle (teuer!).
PartiQL und DynamoDB Local
aws dynamodb execute-statement --statement "SELECT * FROM users WHERE id = '1'"
aws dynamodb execute-statement --statement "INSERT INTO users VALUE {'id': {'S': '2'}, 'name': {'S': 'Grace'}}"
# Lokale Testinstanz (Port 8000)
aws dynamodb list-tables --endpoint-url http://localhost:8000
PartiQL ist eine SQL-ähnliche Abfragesprache für DynamoDB. Mit DynamoDB Local (Java-JAR von AWS) entwickelt man offline ohne Cloud-Kosten.
Praxis-Tipps
- Standard ist eventually consistent;
--consistent-readerzwingt starke Konsistenz. batch-write-itemschreibt bis zu 25 Items pro Aufruf.- TTL (Time to Live) löscht abgelaufene Einträge automatisch.
Verwandte Grundlagen: NoSQL-Datenbank, CouchDB-Befehle und Firebase-Befehle — beide sind verwaltete Cloud-Datenbanken (AWS beziehungsweise Google).
Firebase ist Googles Backend-as-a-Service-Plattform (BaaS) für Web- und Mobile-Apps: Authentifizierung, Datenbanken, Storage, Cloud Functions und Hosting aus einer Hand. Die Kommandozeile übernimmt firebase (Node-basiert, npm install -g firebase-tools).
Projekt einrichten
firebase login # Browser-Login mit Google-Konto
firebase init # Assistent für Firestore, Functions, Hosting ...
firebase use --add # Projekt auswählen / hinzufügen
firebase apps:list # Registrierte Apps anzeigen
firebase init erzeugt die Konfigurationsdatei firebase.json und richtet die gewählten Dienste im Projektverzeichnis ein.
Deployen
firebase deploy # alles deployen
firebase deploy --only hosting # nur statisches Hosting
firebase deploy --only functions # nur Cloud Functions
firebase deploy --only firestore:rules # nur Firestore-Security-Rules
Cloud Firestore ist die dokumentenorientierte NoSQL-Datenbank mit Echtzeit-Synchronisation; die ältere Realtime Database speichert Daten als JSON-Baum. Security Rules steuern, wer lesen und schreiben darf:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null;
}
}
}
Lokal entwickeln und testen
firebase emulators:start # Emulatoren für Auth, Firestore, Functions
firebase emulators:exec "npm test" # Tests gegen Emulatoren
firebase serve # lokales Hosting (Vorschau)
Die Emulatoren bilden die Cloud-Dienste lokal ab — so entstehen keine Kosten und keine echten Daten beim Entwickeln.
Praxis-Tipps
firebase functions:shelltestet Functions interaktiv.firebase firestore:delete --all-collectionsleert eine Datenbank.- Mit Firebase Authentication übernimmt Google das Passwort-, OAuth- und SSO-Management.
Verwandte Grundlagen: NoSQL-Datenbank, JavaScript-Befehle, DynamoDB-Befehle und JSON.