Zum Hauptinhalt springen
Version: 3.0.0-alpha (Diátaxis)

Kafka-Cluster skalieren

Diese Anleitung erklärt, wie Sie die Ressourcen eines Kafka-Clusters auf Hikube anpassen: Anzahl der Broker, CPU-/Speicherressourcen, Speicherplatz sowie die zugehörige ZooKeeper-Konfiguration.

Voraussetzungen

  • kubectl konfiguriert mit Ihrer Hikube-Kubeconfig
  • Ein auf Hikube bereitgestellter Kafka-Cluster

Verfügbare Presets

Hikube bietet vordefinierte Ressourcen-Presets, die auf Kafka-Broker und ZooKeeper-Knoten anwendbar sind:

PresetCPUSpeicher
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi
Warnung

Wenn das Feld resources (explizite CPU/Speicher) definiert ist, wird der Wert von resourcesPreset vollständig ignoriert. Stellen Sie sicher, dass Sie das Feld resources leeren, wenn Sie ein Preset verwenden möchten.

Schritte

1. Aktuelle Ressourcen überprüfen

Überprüfen Sie die aktuelle Cluster-Konfiguration:

kubectl get kafka my-kafka -o yaml | grep -A 8 -E "kafka:|zookeeper:"

Beispielergebnis:

  kafka:
replicas: 3
resourcesPreset: small
size: 10Gi
zookeeper:
replicas: 3
resourcesPreset: small
size: 5Gi

2. Kafka-Broker skalieren

Sie können die Anzahl der Broker, die Ressourcen und den Speicher unabhängig voneinander anpassen.

Option A: Broker-Preset ändern

kubectl patch kafka my-kafka --type='merge' -p='
spec:
kafka:
replicas: 5
resourcesPreset: large
resources: {}
'

Option B: Explizite Ressourcen definieren

kubectl patch kafka my-kafka --type='merge' -p='
spec:
kafka:
replicas: 5
resources:
cpu: 4000m
memory: 8Gi
'

Sie können auch das vollständige Manifest ändern:

kafka-scaled.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kafka
metadata:
name: my-kafka
spec:
kafka:
replicas: 5
resources:
cpu: 4000m
memory: 8Gi
size: 50Gi
zookeeper:
replicas: 3
resourcesPreset: small
size: 5Gi
topics: []
kubectl apply -f kafka-scaled.yaml
Warnung

Die Reduzierung der Broker-Anzahl auf einem bestehenden Cluster kann zu Datenverlust führen, wenn die Partitionen nicht zuvor umverteilt werden. Erhöhen Sie die Broker-Anzahl immer, anstatt sie zu reduzieren.

3. ZooKeeper skalieren

ZooKeeper verwendet einen Quorum-Mechanismus: Die Anzahl der Replikate muss ungerade sein (1, 3, 5), um die Leader-Wahl zu gewährleisten.

kubectl patch kafka my-kafka --type='merge' -p='
spec:
zookeeper:
replicas: 3
resourcesPreset: medium
resources: {}
'

Oder mit expliziten Ressourcen:

kafka-zookeeper-scaled.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kafka
metadata:
name: my-kafka
spec:
kafka:
replicas: 5
resourcesPreset: large
size: 50Gi
zookeeper:
replicas: 3
resources:
cpu: 1000m
memory: 1Gi
size: 10Gi
topics: []
kubectl apply -f kafka-zookeeper-scaled.yaml
Tipp

In der Produktion reichen 3 ZooKeeper-Replikate in den meisten Fällen aus. 5 Replikate werden nur für sehr große Cluster (10+ Broker) empfohlen.

4. Speicher bei Bedarf erhöhen

Wenn den Brokern der Speicherplatz ausgeht, erhöhen Sie die Größe des persistenten Volumes:

kubectl patch kafka my-kafka --type='merge' -p='
spec:
kafka:
size: 100Gi
'
Warnung

Die Anzahl der Replikate eines Topics darf die Anzahl der Broker nicht überschreiten. Nach einem Scale-Up der Broker können Sie den Replikationsfaktor Ihrer bestehenden Topics erhöhen.

5. Anwenden und überprüfen

Falls Sie die Änderungen noch nicht angewendet haben:

kubectl apply -f kafka-scaled.yaml

Überwachen Sie das Rolling Update der Pods:

kubectl get po -w | grep my-kafka

Erwartetes Ergebnis (während des Rolling Updates):

my-kafka-kafka-0       1/1     Running       0   45m
my-kafka-kafka-1 1/1 Running 0 44m
my-kafka-kafka-2 1/1 Terminating 0 43m
my-kafka-kafka-2 0/1 Pending 0 0s
my-kafka-kafka-2 1/1 Running 0 30s

Warten Sie, bis alle Pods im Status Running sind:

kubectl get po | grep my-kafka
my-kafka-kafka-0       1/1     Running   0   10m
my-kafka-kafka-1 1/1 Running 0 8m
my-kafka-kafka-2 1/1 Running 0 6m
my-kafka-kafka-3 1/1 Running 0 4m
my-kafka-kafka-4 1/1 Running 0 2m
my-kafka-zookeeper-0 1/1 Running 0 10m
my-kafka-zookeeper-1 1/1 Running 0 8m
my-kafka-zookeeper-2 1/1 Running 0 6m

Überprüfung

Bestätigen Sie, dass die neuen Ressourcen angewendet wurden:

kubectl get kafka my-kafka -o yaml | grep -A 8 -E "kafka:|zookeeper:"

Überprüfen Sie, ob der Cluster funktionsfähig ist, indem Sie die Topics auflisten:

kubectl run kafka-debug --rm -it --image=bitnami/kafka:latest --restart=Never -- \
kafka-topics.sh --bootstrap-server my-kafka-kafka-bootstrap:9092 --list

Weiterführende Informationen