Dos stacks independientes en modo KRaft. Cada stack es un único YAML con brokers, servicios, tópicos y workloads.
| Stack | Archivo | Namespace | Brokers | Workloads incluidos |
|---|---|---|---|---|
| Alto rendimiento | kafka-high-perf.yaml |
kafka-high-perf |
12 | Job topic-setup, 6× producer-perf, 12× consumer-perf |
| Eventos / dev | kafka-events.yaml |
kafka-events |
3 | Job topic-setup, producer, consumer |
flowchart TB
subgraph HP["kafka-high-perf.yaml"]
HBrokers["12 brokers KRaft"]
HSvc["Services"]
HTopic["Job: ultra-fast-topic"]
HProd["6× producer-perf"]
HCons["12× consumer-perf"]
HBrokers --> HSvc
HTopic --> HProd
HTopic --> HCons
HProd --> HSvc
HCons --> HSvc
end
subgraph EV["kafka-events.yaml"]
EBrokers["3 brokers KRaft"]
ESvc["Services"]
ETopic["Job: topic-test"]
EProd["kafka-producer"]
ECons["kafka-consumer"]
EBrokers --> ESvc
ETopic --> EProd
ETopic --> ECons
EProd --> ESvc
ECons --> ESvc
end
Los PersistentVolumes apuntan al nodo kafka-node (hostname detectado del entorno). Rutas de datos:
| Stack | Ruta en el nodo |
|---|---|
| Alto rendimiento | /mnt/fast-ssd/kafka-{0..11} |
| Eventos | /mnt/kafka-data/broker-{0..2} |
Si despliegas en cluster multi-nodo, edita kubernetes.io/hostname en cada PV del stack correspondiente.
./install.sh --install
./install-tools.sh # opcional: kafkacat, k6sudo mkdir -p /mnt/kafka-data/broker-{0..2}
kubectl apply -f kafka-events.yaml
kubectl -n kafka-events wait --for=condition=ready pod -l app=kafka --timeout=300s
kubectl -n kafka-events logs -l app=kafka-producer --tail=20
kubectl -n kafka-events logs -l app=kafka-consumer --tail=20El Job crea topic-test. El producer envía un heartbeat JSON cada 30 s; el consumer lo lee en el grupo test-consumidor.
sudo mkdir -p /mnt/fast-ssd/kafka-{0..11}
kubectl apply -f kafka-high-perf.yaml
kubectl -n kafka-high-perf wait --for=condition=ready pod -l app=kafka --timeout=600sEl Job crea ultra-fast-topic (72 particiones). Los deployments de perf esperan el tópico antes de iniciar el benchmark.
Nota: 12 brokers con 16–24 GiB RAM cada uno requieren hardware dedicado. En un solo nodo (
kafka-node) sirve para validar manifests; para benchmark real usa cluster multi-nodo.
| Archivo | Propósito |
|---|---|
kafka-high-perf.yaml |
Stack completo alto rendimiento |
kafka-events.yaml |
Stack completo eventos + clientes |
kafka-operations.sh |
Operaciones manuales: tópicos, grupos, limpieza PV |
Script kafka-startup en cada stack:
- Deriva
node.iddel ordinal del pod (kafka-0→0) - Sustituye variables en
server.properties - Ejecuta
kafka-storage.sh formaten el primer arranque - Inicia el broker con
KAFKA_HEAP_OPTS(12 GiB en high-perf, 2 GiB en eventos)
# Consola interactiva (stack eventos)
kubectl exec -it deploy/kafka-producer -n kafka-events -- bash
kubectl exec -it kafka-0 -n kafka-events -- /opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafka-service.kafka-events.svc.cluster.local:9092 --listMás comandos en kafka-operations.sh.
num.network.threads=16
num.io.threads=24
compression.type=snappy
log.segment.bytes=1073741824
default.replication.factor=2
min.insync.replicas=1