Producers y consumers
Los producers publican eventos y los consumers los leen. La calidad de un sistema Kafka depende mucho de como configuras ambos.
Producer
Un producer envia registros a un topic.
Registro:
topic + key + value + headers + timestampEjemplo JSON:
{
"event_id": "evt_001",
"event_type": "order_created",
"order_id": "ord_123",
"occurred_at": "2026-06-26T10:00:00Z"
}Flujo de escritura
sequenceDiagram
participant P as Producer
participant B as Broker leader
participant R as Replicas
P->>B: Produce event
B->>R: Replicate
R-->>B: Ack replica
B-->>P: AckAcks
Configuracion importante:
acks=0
acks=1
acks=allacks=0: maxima velocidad, minima seguridad.acks=1: confirma cuando leader escribe.acks=all: confirma cuando replicas sincronizadas escriben.
En produccion critica, usa acks=all.
Idempotent producer
Evita duplicados causados por reintentos del producer.
enable.idempotence=trueEs una configuracion recomendada para productores importantes.
Batching
Kafka es eficiente cuando agrupa eventos.
Parametros:
batch.sizelinger.mscompression.type
Mas batching puede mejorar throughput, pero anade latencia.
Consumer
Un consumer lee eventos de una o varias partitions.
flowchart LR
T["Topic"] --> P0["Partition 0"]
T --> P1["Partition 1"]
P0 --> C["Consumer"]
P1 --> CPoll loop
Un consumer suele seguir este ciclo:
poll -> procesar -> guardar resultado -> commit offsetEl orden exacto importa. Si haces commit antes de procesar, puedes perder eventos ante fallo.
Commit de offsets
Opciones:
- Automatico: mas simple, menos control.
- Manual: mas seguro para procesos importantes.
Patron habitual:
1. Leer eventos.
2. Procesar.
3. Persistir efectos.
4. Hacer commit del offset.Idempotencia del consumidor
Kafka puede entregar un evento mas de una vez en ciertos escenarios. El consumidor debe tolerarlo.
Tecnicas:
- Guardar
event_idprocesados. - Usar upserts.
- Diseñar operaciones idempotentes.
- Transacciones en la base destino cuando aplique.
Headers
Los headers permiten metadata sin tocar payload:
correlation_id
schema_version
source_service
trace_idSon utiles para observabilidad y trazabilidad.
Buenas practicas
- Usa keys estables.
- Habilita idempotencia en productores criticos.
- Usa compresion para eventos grandes o mucho volumen.
- Haz consumidores idempotentes.
- Controla el commit de offsets en procesos importantes.
- Propaga
trace_idocorrelation_id.
