Command Palette

Search for a command to run...

ES·EN

Nivel 2 · 25 min

Fundamentos de Kafka

Apache Kafka es una plataforma de streaming de eventos distribuida construida sobre un commit log append-only. Desacopla productores de consumidores, maneja millones de eventos por segundo y garantiza entrega ordenada dentro de particiones. Entender Kafka empieza con topics, particiones, offsets y el modelo de consumo.

Topics y Particiones

Un topic es un canal lógico para eventos de un tipo dado (pedidos, clicks, pagos). Los topics se dividen en particiones — cada partición es una secuencia ordenada e inmutable de registros. Las particiones son la unidad de paralelismo: más particiones = más consumidores pueden leer en paralelo. Cada registro tiene un offset que incrementa monotónicamente. Los registros se agregan al final; los consumidores leen desde cualquier offset. La partition key determina a qué partición va un registro — registros con la misma clave siempre van a la misma partición, garantizando orden por clave.

Productores y Consumidores

Los productores escriben registros a topics. Por defecto, round-robin entre particiones; con clave, hashing consistente. Kafka usa modelo pull — los consumidores hacen poll de nuevos registros en lugar de que Kafka empuje. Esto significa que los consumidores controlan su tasa de lectura y pueden ponerse al día a su propio ritmo. Los consumidores commiten offsets a Kafka para trackear progreso. Al reiniciar, retoman desde el último offset commiteado. El modelo pull también maneja consumidores lentos bien — el topic retiene registros hasta que expira el período de retención.

Semánticas de Entrega

Kafka soporta tres semánticas. At-most-once: commitear offset antes de procesar — si el consumidor falla después del commit pero antes de procesar, el registro se pierde. At-least-once: commitear después de procesar — si falla después de procesar pero antes del commit, el registro se reprocesa. Exactly-once: combinar productores idempotentes + API transaccional + read-process-write atómico. La mayoría de los sistemas usa at-least-once con consumidores idempotentes (deduplicación por ID de registro) como balance pragmático.

Puntos clave

  • La partition key es la decisión de diseño más importante — determina garantías de orden y distribución de carga.
  • El modelo pull de Kafka deja que los consumidores controlen su ritmo — crítico para manejar picos sin perder mensajes.
  • El offset es el cursor — resetearlo a earliest reproduce toda la historia; a latest omite eventos viejos. Ambos son herramientas operativas válidas.

Code example

// Productor: la clave determina la particion
ProducerRecord<String, String> record = new ProducerRecord<'>(
  "orders",        // topic
  customerId,      // partition key
  orderJson        // value
);
producer.send(record, (meta, ex) -> {
  if (ex != null) log.error("Send failed", ex);
  else log.info("offset={'}", meta.offset());
});