Skip to main content
Version: 3.0.0-alpha (Diátaxis)

Deploy Kafka in 5 minutes

This guide walks you step by step through deploying your first Kafka cluster on Hikube, from the YAML manifest to initial messaging tests.


Objectives

By the end of this guide, you will have:

  • A Kafka cluster deployed and running on Hikube
  • 3 Kafka brokers and 3 ZooKeeper nodes for high availability
  • A topic ready to receive messages
  • Persistent storage for your Kafka and ZooKeeper data

Prerequisites

Before you begin, make sure you have:

  • kubectl configured with your Hikube kubeconfig
  • Admin rights on your tenant
  • A dedicated namespace to host your Kafka cluster
  • kafkacat (or kcat) installed on your workstation (optional, for testing)

Step 1: Create the Kafka manifest

Create a kafka.yaml file with the following configuration:

kafka.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: Kafka
metadata:
name: example
spec:
external: false
kafka:
replicas: 3
resourcesPreset: small
size: 10Gi
storageClass: replicated
zookeeper:
replicas: 3
resourcesPreset: small
size: 5Gi
storageClass: replicated
topics:
- name: my-topic
partitions: 3
replicas: 3
config:
retention.ms: "604800000"
cleanup.policy: "delete"
tip

Kafka does not have authentication enabled by default on Hikube. For production use, it is recommended not to expose the cluster externally (external: false). See the API Reference for the full configuration.


Step 2: Deploy the Kafka cluster

Apply the manifest and verify that the deployment starts:

# Apply the manifest
kubectl apply -f kafka.yaml

Check the cluster status (may take 2-3 minutes):

kubectl get kafka

Expected output:

NAME      READY   AGE     VERSION
example True 2m 0.13.0

Step 3: Pod verification

Verify that all pods are in Running state:

kubectl get pods | grep kafka

Expected output:

kafka-example-kafka-0        1/1     Running   0   2m
kafka-example-kafka-1 1/1 Running 0 2m
kafka-example-kafka-2 1/1 Running 0 2m
kafka-example-zookeeper-0 1/1 Running 0 2m
kafka-example-zookeeper-1 1/1 Running 0 2m
kafka-example-zookeeper-2 1/1 Running 0 2m

With kafka.replicas: 3 and zookeeper.replicas: 3, you get 6 pods:

PrefixRoleCount
kafka-example-kafka-*Kafka Brokers (receive, store, and distribute messages)3
kafka-example-zookeeper-*ZooKeeper (cluster coordination and leader election)3

Step 4: Retrieve credentials

Kafka on Hikube does not have authentication enabled by default. Connections are made directly via the bootstrap service:

kubectl get svc | grep kafka

Expected output:

kafka-example-kafka-bootstrap    ClusterIP      10.96.xx.xx    <none>        9092/TCP    2m
kafka-example-kafka-brokers ClusterIP None <none> 9092/TCP 2m
kafka-example-zookeeper-client ClusterIP 10.96.xx.xx <none> 2181/TCP 2m
note

The kafka-example-kafka-bootstrap service is the main entry point for Kafka clients.


Step 5: Connection and testing

Port-forward the Kafka service

kubectl port-forward svc/kafka-example-kafka-bootstrap 9092:9092 &

Publish and consume a message

# Send a message to the topic
echo "Hello Hikube!" | kafkacat -b localhost:9092 -t my-topic -P

# Consume the message
kafkacat -b localhost:9092 -t my-topic -C -o beginning -e

Expected output:

Hello Hikube!
note

If you don't have kafkacat, you can install it with apt install kafkacat (Debian/Ubuntu) or brew install kcat (macOS).


Step 6: Quick troubleshooting

Pods in CrashLoopBackOff

# Check the logs of the failing broker
kubectl logs kafka-example-kafka-0

# Check the pod events
kubectl describe pod kafka-example-kafka-0

Common causes: insufficient memory (kafka.resources.memory too low), storage volume full.

Kafka not accessible

# Check that the services exist
kubectl get svc | grep kafka

# Check the bootstrap service
kubectl describe svc kafka-example-kafka-bootstrap

Common causes: port-forward not active, wrong port in the connection string, service not ready.

ZooKeeper errors

# Check ZooKeeper logs
kubectl logs kafka-example-zookeeper-0

# Check ZooKeeper pod status
kubectl get pods | grep zookeeper

Common causes: the ZooKeeper quorum requires an odd number of replicas (3 minimum recommended), insufficient disk space.

General diagnostic commands

# Recent events in the namespace
kubectl get events --sort-by=.metadata.creationTimestamp

# Detailed Kafka cluster status
kubectl describe kafka example

Step 7: Cleanup

To delete the test resources:

kubectl delete -f kafka.yaml
warning

This action deletes the Kafka cluster and all associated data. This operation is irreversible.


Summary

You have deployed:

  • A Kafka cluster with 3 brokers distributed across different nodes
  • 3 ZooKeeper nodes for cluster coordination
  • A topic configured with 3 partitions and 3 replicas
  • Persistent storage for data durability

Next steps

  • API Reference: Full configuration of all Kafka options
  • Overview: Detailed architecture and Kafka use cases on Hikube