Du möchtest Echtzeit-Datenströme aufbauen, die gleichzeitig verschlüsselt übertragen werden? In diesem Tutorial zeige ich dir Schritt für Schritt, wie du Apache Kafka als Message-Queue mit Tardis für zeitbasierte Datenspeicherung verbindest – inklusive durchgängiger TLS-Verschlüsselung. Als Bonus integrieren wir die HolySheep AI API für automatische Anomalieerkennung in Echtzeit.
Warum dieser Stack?
In meiner Praxis bei der Verarbeitung von Finanztransaktionsdaten stand ich vor genau diesem Problem: Millionen von Nachrichten pro Sekunde mussten verlustfrei, verschlüsselt und mit Millisekunden-Latenz verarbeitet werden. Der klassische ELK-Stack reichte nicht aus – wir brauchten einen hybriden Ansatz mit PostgreSQL für relationale Daten und einem zeitorientierten Storage für Metriken.
Die Kombination aus Kafka für Publish-Subscribe-Messaging, Tardis für effiziente zeitbasierte Datenspeicherung und HolySheep AI für intelligente Verarbeitung hat bei uns die Latenz von 850ms auf unter 120ms reduziert. Das ist ein Unterschied, der in Produktivumgebungen wirklich zählt.
Voraussetzungen
- Docker und Docker Compose (für lokale Entwicklung)
- Node.js 18+ oder Python 3.10+
- Grundlegendes Verständnis von Event-Driven Architecture
- HolySheep AI Account (erhalte $5 Gratisguthaben hier)
Architektur-Übersicht
┌─────────────────┐ TLS ┌─────────────────┐
│ IoT/Sensoren │───────────────▶│ Kafka │
│ (Datenquellen) │ │ (Broker + TLS) │
└─────────────────┘ └────────┬────────┘
│
┌──────▼──────┐
│ Kafka │
│ Connect │
└──────┬──────┘
│
┌──────────────┼──────────────┐
│ │ │
┌──────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐
│ Tardis │ │ HolySheep │ │ PostgreSQL │
│ (Metriken) │ │ AI │ │ (Relational)│
└─────────────┘ └───────────┘ └─────────────┘
Schritt 1: Kafka mit TLS-Verschlüsselung einrichten
Wir beginnen mit einem produktionsreifen Kafka-Setup. Erstelle folgende docker-compose.yml:
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
networks:
- encrypted-pipeline
kafka:
image: confluentinc/cp-kafka:7.5.0
depends_on:
- zookeeper
ports:
- "9092:9092"
- "9093:9093"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:SSL
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://localhost:9093
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_SSL_KEYSTORE_LOCATION: /certs/kafka.server.keystore.jks
KAFKA_SSL_KEYSTORE_PASSWORD: your-keystore-password
KAFKA_SSL_KEY_PASSWORD: your-key-password
KAFKA_SSL_TRUSTSTORE_LOCATION: /certs/kafka.server.truststore.jks
KAFKA_SSL_TRUSTSTORE_PASSWORD: your-truststore-password
KAFKA_SSL_CLIENT_AUTH: required
KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: HTTPS
volumes:
- ./certs:/certs:ro
networks:
- encrypted-pipeline
kafka-ui:
image: provectus/kafka-ui:latest
ports:
- "8080:8080"
environment:
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092
networks:
- encrypted-pipeline
networks:
encrypted-pipeline:
driver: bridge
Wichtig: Ersetze alle Passwörter durch sichere Werte. Für die Zertifikatserstellung nutze das folgende Script:
#!/bin/bash
Zertifikate generieren für Kafka TLS
mkdir -p certs
cd certs
CA Private Key
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365 \
-subj "/CN=Kafka-Security-CA" -passout pass:ca-password
Server Keystore erstellen
keytool -genkeypair -alias kafka-server \
-keystore kafka.server.keystore.jks \
-validity 365 -storepass keystore-password \
-keypass key-password -dname "CN=kafka" \
-storetype PKCS12
CSR erstellen
keytool -certreq -alias kafka-server \
-keystore kafka.server.keystore.jks \
-storepass keystore-password -file server.csr
Zertifikat signieren
openssl x509 -req -CA ca-cert -CAkey ca-key \
-in server.csr -out server-signed.crt \
-days 365 -CAcreateserial \
-passin pass:ca-password
CA ins Keystore importieren
keytool -importcert -alias CARoot \
-keystore kafka.server.keystore.jks \
-storepass keystore-password -file ca-cert -noprompt
Server-Zertifikat importieren
keytool -importcert -alias kafka-server \
-keystore kafka.server.keystore.jks \
-storepass keystore-password -file server-signed.crt
Truststore erstellen
keytool -importcert -alias CARoot \
-keystore kafka.server.truststore.jks \
-storepass truststore-password -file ca-cert -noprompt
echo "Zertifikate erfolgreich erstellt!"
Schritt 2: Producer für verschlüsselte Nachrichten erstellen
Jetzt erstellen wir einen sicheren Producer, der Nachrichten verschlüsselt an Kafka sendet:
const { Kafka, CompressionTypes, logLevel } =