skills/kubeblocks-addon-kafka/SKILL.md
Deploy and manage Apache Kafka clusters on KubeBlocks with topology selection guidance. Supports combined mode (broker + controller co-located) and separated mode (dedicated broker and controller nodes) with optional monitoring exporter. Use when the user mentions Kafka, message queue, event streaming, message broker, or explicitly wants to create a Kafka cluster. Provides topology comparison, best-practice defaults, and connection methods. For generic cluster creation across all engines, see kubeblocks-create-cluster. For Day-2 operations (scaling, etc.), use the corresponding operation skill.
npx skillsauth add apecloud/kubeblocks-skills kubeblocks-addon-kafkaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Deploy Apache Kafka clusters on Kubernetes using KubeBlocks. Supports combined mode (broker + controller in one process) and separated mode (dedicated broker and controller nodes) with optional monitoring via exporter.
Official docs: https://kubeblocks.io/docs/preview/user_docs/kubeblocks-for-kafka/cluster-management/create-a-kafka-cluster Full doc index: https://kubeblocks.io/llms-full.txt
# Check if kafka addon is installed
helm list -n kb-system | grep kafka
# Install if missing
helm install kb-addon-kafka kubeblocks/kafka --namespace kb-system --version 1.0.0
| Topology | Value | Components | Use Case |
|---|---|---|---|
| Combined | combined | kafka-combine | Dev/test, broker+controller in one |
| Combined + Monitor | combined_monitor | kafka-combine + exporter | Combined with metrics |
| Separated | separated | kafka-broker + kafka-controller | Production, dedicated roles |
| Separated + Monitor | separated_monitor | kafka-broker + kafka-controller + exporter | Production with metrics |
Kafka uses KRaft mode (no ZooKeeper dependency). Controllers manage cluster metadata via the Raft protocol.
| Version | serviceVersion |
|---|---|
| Kafka 3.3 | 3.3.2 |
- [ ] Step 1: Ensure addon is installed
- [ ] Step 2: Create namespace
- [ ] Step 3: Create cluster (choose topology)
- [ ] Step 4: Wait for cluster to be ready
- [ ] Step 5: Produce and consume messages
helm list -n kb-system | grep kafka
If not found:
helm install kb-addon-kafka kubeblocks/kafka --namespace kb-system --version 1.0.0
kubectl create namespace demo --dry-run=client -o yaml | kubectl apply -f -
Broker and controller run in the same process. Simpler but not recommended for production:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: kafka-cluster
namespace: demo
spec:
clusterDef: kafka
topology: combined
terminationPolicy: Delete
componentSpecs:
- name: kafka-combine
serviceVersion: "3.3.2"
replicas: 3
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
env:
- name: KB_KAFKA_BROKER_HEAP
value: "-Xmx256m -Xms256m"
- name: KB_KAFKA_CONTROLLER_HEAP
value: "-Xmx256m -Xms256m"
volumeClaimTemplates:
- name: data
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 20Gi}}
- name: metadata
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 5Gi}}
Dedicated broker and controller nodes for better isolation and scalability:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: kafka-separated
namespace: demo
spec:
clusterDef: kafka
topology: separated
terminationPolicy: Delete
componentSpecs:
- name: kafka-broker
serviceVersion: "3.3.2"
replicas: 3
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
env:
- name: KB_KAFKA_BROKER_HEAP
value: "-Xmx256m -Xms256m"
volumeClaimTemplates:
- name: data
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 20Gi}}
- name: metadata
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 5Gi}}
- name: kafka-controller
serviceVersion: "3.3.2"
replicas: 3
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
env:
- name: KB_KAFKA_CONTROLLER_HEAP
value: "-Xmx256m -Xms256m"
volumeClaimTemplates:
- name: metadata
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 5Gi}}
Key points:
data and metadata volumesmetadata volume (they don't store message data)Add an exporter component for Prometheus-compatible metrics:
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: kafka-monitored
namespace: demo
spec:
clusterDef: kafka
topology: separated_monitor
terminationPolicy: Delete
componentSpecs:
- name: kafka-broker
serviceVersion: "3.3.2"
replicas: 3
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
env:
- name: KB_KAFKA_BROKER_HEAP
value: "-Xmx256m -Xms256m"
volumeClaimTemplates:
- name: data
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 20Gi}}
- name: metadata
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 5Gi}}
- name: kafka-controller
serviceVersion: "3.3.2"
replicas: 3
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
env:
- name: KB_KAFKA_CONTROLLER_HEAP
value: "-Xmx256m -Xms256m"
volumeClaimTemplates:
- name: metadata
spec:
accessModes: [ReadWriteOnce]
resources: {requests: {storage: 5Gi}}
- name: kafka-exporter
replicas: 1
resources:
limits: {cpu: "0.5", memory: "0.5Gi"}
requests: {cpu: "0.5", memory: "0.5Gi"}
Kafka configuration can be tuned via environment variables on the component spec:
| Variable | Description | Example |
|---|---|---|
| KB_KAFKA_BROKER_HEAP | Broker JVM heap settings | -Xmx512m -Xms512m |
| KB_KAFKA_CONTROLLER_HEAP | Controller JVM heap settings | -Xmx256m -Xms256m |
| KB_KAFKA_ENABLE_SASL | Enable SASL authentication | true |
| KB_KAFKA_PUBLIC_ACCESS | Enable external access mode | true |
kubectl -n demo get cluster <cluster-name> -w
Wait until STATUS shows Running. Kafka clusters typically take 2-4 minutes.
Check pods:
kubectl -n demo get pods -l app.kubernetes.io/instance=<cluster-name>
kubectl -n demo exec -it kafka-cluster-kafka-combine-0 -- \
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic --partitions 3 --replication-factor 1
kubectl -n demo exec -it kafka-cluster-kafka-combine-0 -- \
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
kubectl -n demo exec -it kafka-cluster-kafka-combine-0 -- \
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
Replace the pod name with the broker pod:
kubectl -n demo exec -it kafka-separated-kafka-broker-0 -- \
kafka-topics.sh --bootstrap-server localhost:9092 --list
Cluster stuck in Creating:
kubectl -n demo describe cluster <cluster-name>
kubectl -n demo get events --sort-by='.lastTimestamp'
Broker not starting:
kubectl -n demo logs <broker-pod>
Controller quorum issues:
Out of memory:
KB_KAFKA_BROKER_HEAP / KB_KAFKA_CONTROLLER_HEAP environment variables| Operation | Skill | External Docs | |---|---|---| | Stop / Start / Restart | cluster-lifecycle | Docs | | Scale CPU / Memory | vertical-scaling | Docs | | Add / Remove replicas | horizontal-scaling | Docs | | Expand storage | volume-expansion | Docs | | Change parameters | reconfigure-parameters | Docs |
Follow safety-patterns.md for dry-run before apply, status confirmation after watch, and pre-deletion checklist.
devops
Expand persistent volume storage for KubeBlocks database clusters via OpsRequest. Requires the StorageClass to support volume expansion (allowVolumeExpansion=true). Use when the user needs more disk space, wants to increase storage, expand volumes, or resize PVCs. NOT for changing CPU/memory (see vertical-scaling) or adding more replicas (see horizontal-scaling). Note that volume shrinking is not supported by Kubernetes.
data-ai
Scale CPU and memory resources for KubeBlocks database clusters via OpsRequest (vertical scaling). Supports in-place updates when the feature gate is enabled. Use when the user wants to change, increase, decrease, resize, or adjust CPU or memory resources of a database cluster. NOT for adding/removing replicas or shards (see horizontal-scaling) or expanding disk storage (see volume-expansion).
data-ai
Upgrade the KubeBlocks operator itself via Helm. Covers update operator, upgrade to v1.0, update kubeblocks version, and CRD updates. Use when the user wants to upgrade KubeBlocks, update the operator, or upgrade to a new KubeBlocks release. NOT for upgrading database engine versions (see minor-version-upgrade).
development
Diagnostic guide for KubeBlocks-managed database clusters. Use when the user reports troubleshoot, debug, diagnose, not working, error, failed, stuck, CrashLoopBackOff, cluster exception, or similar problems with their database cluster. This skill guides the agent through diagnostic steps — it does NOT perform actions.