Skip to content

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:

txt
topic + key + value + headers + timestamp

Ejemplo JSON:

json
{
  "event_id": "evt_001",
  "event_type": "order_created",
  "order_id": "ord_123",
  "occurred_at": "2026-06-26T10:00:00Z"
}

Flujo de escritura

mermaid
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: Ack

Acks

Configuracion importante:

txt
acks=0
acks=1
acks=all
  • acks=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.

txt
enable.idempotence=true

Es una configuracion recomendada para productores importantes.

Batching

Kafka es eficiente cuando agrupa eventos.

Parametros:

  • batch.size
  • linger.ms
  • compression.type

Mas batching puede mejorar throughput, pero anade latencia.

Consumer

Un consumer lee eventos de una o varias partitions.

mermaid
flowchart LR
  T["Topic"] --> P0["Partition 0"]
  T --> P1["Partition 1"]
  P0 --> C["Consumer"]
  P1 --> C

Poll loop

Un consumer suele seguir este ciclo:

txt
poll -> procesar -> guardar resultado -> commit offset

El 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:

txt
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_id procesados.
  • Usar upserts.
  • Diseñar operaciones idempotentes.
  • Transacciones en la base destino cuando aplique.

Headers

Los headers permiten metadata sin tocar payload:

txt
correlation_id
schema_version
source_service
trace_id

Son 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_id o correlation_id.