GuíaIntermedio
Guía de Streaming con Kafka y Flink
Esta guía empieza probando, con código, el error más caro y mejor documentado del streaming: recalcular en Kafka+Flink el mismo embudo de sesiones que Kiosko ya calculó en batch — y llegar exactamente al mismo `35.3%`, con más infraestructura y cero valor nuevo. A partir de esa prueba, la guía traza la línea real: streaming se justifica en los problemas que el batch, por diseño, no puede resolver, sin importar cuánto lo optimices. Con Apache Kafka (4.x, modo KRaft, $0 local) y Apache Flink/PyFlink corriendo de verdad en Docker, resuelves cuatro casos concretos con Kiosko: detectar en minutos que una tienda dejó de reportar (el caso estrella, contra un DAG diario que no se enteraría hasta mañana), capturar un cambio de precio directo del write-ahead log de Postgres con Debezium (CDC) en vez de declararlo a mano en Python, construir ventanas de tiempo-evento con watermarks sobre un flujo continuo, y mantener estado incremental sin re-sumar el historial completo en cada corrida. La guía es honesta sobre el hueco de mercado de Flink y responde con evidencia nueva (prima salarial de Kafka, ~33% de vacantes senior de streaming en el Reino Unido) sin exagerar el rol de Flink más allá de lo que Kiosko necesita de verdad.
- 64
- lecciones
- 8
- módulos
- Inglés · Español
- disponible en
- Sí
- certificado
- Gratis
- acceso
Resultados
Lo que vas a poder hacer
- Reproducir en Kafka+Flink el mismo embudo `page_view → add_to_cart → purchase` que un pipeline batch ya calculó, y verificar que da el mismo resultado — la prueba empírica de cuándo streaming NO agrega valor
- Instalar Kafka en modo KRaft con Docker (sin ZooKeeper) y PyFlink localmente, $0, sin cuenta de nube
- Explicar topics, particiones y offsets como la unidad real de orden y paralelismo, y elegir un cliente Python de Kafka con criterio
- Construir un productor y un consumidor deterministas y finitos que convierten archivos fijos de órdenes en un stream real, verificando el mismo total conocido
- Distinguir tiempo de procesamiento de tiempo-evento, y usar watermarks para cerrar ventanas tumbling de forma determinista sobre `order_ts`
- Contrastar una ventana tumbling (recalculable) con estado incremental con clave (un total corriente que nunca vuelve a sumar el historial completo)
- Detectar en vivo, con una ventana de sesión que se cierra por silencio, que una tienda dejó de reportar — y cuantificar el contraste en minutos contra un DAG diario
- Capturar un `UPDATE` real de Postgres con Debezium (CDC) y aplicarlo con `upsert()` a una tabla Iceberg existente, cerrando el puente entre el sistema transaccional y el warehouse
- Distinguir con criterio qué metadata de infraestructura (offsets, timestamps de Kafka/Debezium) no es reproducible, frente al contenido de negocio que sí lo es
Antes de empezar
Qué necesitas traer
Es para ti si...
- Data engineers que necesitan saber, con evidencia y no con moda, cuándo un problema requiere streaming de verdad y cuándo es batch disfrazado
- Equipos evaluando Kafka para casos de uso donde la latencia SÍ es el producto (alertas operacionales, fraude, sincronización con un sistema transaccional)
- Cualquiera preparándose para roles senior de ingeniería de datos donde Kafka/Flink ya aparecen como requisito duro, especialmente en fintech y logística
- Data engineers que completaron `lakehouse-and-iceberg-guide` y quieren cerrar el hilo de CDC que esa guía dejó nombrado sin implementar
Requisitos y materiales
- Python intermedio; comodidad con la línea de comandos y Docker/Docker Compose
- Ideal haber completado `lakehouse-and-iceberg-guide` (la tabla `dim_product` en Iceberg que el módulo de CDC alimenta) y `dbt-analytics-engineering-guide` (el embudo de sesiones que el Módulo 1 recalcula)
- Docker instalado y funcionando localmente (Kafka, y Postgres + Debezium solo en los módulos de CDC)
Contenido
El temario, módulo por módulo
Abre cualquiera para ver sus lecciones.
- Presentación del módulo: cuando la latencia ES el producto
- El flag débil: streaming que recalcula batch
- Lo que el mercado de 2026 realmente paga
- Cuando la latencia de verdad ES el producto
- Instalando Kafka en modo KRaft con Docker
- Instalando PyFlink localmente
- Probándolo: el mismo embudo 35.3% en Kafka y Flink
- Proyecto: el primer "hello world" de Kafka y Flink de Kiosko
- Presentación del módulo: la anatomía real de Kafka
- Un topic es un log ordenado, de solo-anexar
- Particiones, y por qué el orden solo se garantiza dentro de una
- Offsets: el marcador de posición de un consumidor
- Eligiendo un cliente Python: `confluent-kafka` vs. `kafka-python`
- Creando el topic `kiosko.orders` de Kiosko
- Produciendo y consumiendo tu primer mensaje
- Proyecto: el primer topic de Kafka de Kiosko
- Presentación del módulo: del archivo fijo al flujo real
- De archivos fijos a un flujo de mensajes
- Clave de mensajes por `store_id`
- Construyendo un productor determinista y finito
- Construyendo un consumidor que verifica el conteo
- Replay de la semana canónica a través de Kafka
- Verificando de nuevo el mismo total `106.15`
- Proyecto: el stream de órdenes de Kiosko en Kafka
- Presentación del módulo: el corazón de esta guía
- Tiempo de procesamiento vs. tiempo-evento
- Por qué el reloj de pared está prohibido en esta guía
- Watermarks: cómo Flink sabe que es seguro cerrar una ventana
- Bounded out-of-orderness en PyFlink
- Ventanas tumbling sobre `order_ts`
- Reproduciendo los totales diarios de Kiosko con un job de ventanas
- Proyecto: la primera ventana determinista de Kiosko
- Presentación del módulo: dos formas de agregar, una sola ventaja real
- Revenue por ventana, por tienda
- Estado con clave: la otra forma de agregar
- Unidades vendidas corrientes por producto, sin recomputar todo
- Por qué lo incremental le gana a recomputar todo el historial
- Verificando ambos agregados contra los totales conocidos
- Qué te da esto que el batch no te da
- Proyecto: ventas en vivo y señal de inventario corriente de Kiosko
- Presentación del módulo: el caso estrella de esta guía
- Ventanas de sesión: una ventana que se cierra por silencio
- Diseñando un chequeo de "latido" para una tienda
- El 10 de agosto de Kiosko: cuando S02 se queda callada
- Construyendo el detector de silencio en PyFlink
- La alerta: tienda en silencio, y cuándo dispara
- Minutos vs. mañana: comparando contra el DAG diario
- Proyecto: la alerta operacional en vivo de Kiosko
- Presentación del módulo: el hilo que otra guía dejó abierto a propósito
- Qué resuelve CDC que un `SELECT` periódico no puede
- Debezium y el write-ahead log
- Levantando Postgres, Kafka Connect y Debezium con Docker
- Capturando el cambio de precio de `P002` como un evento real
- Leyendo el payload `before`/`after` de los eventos de cambio
- Aplicando el cambio con `table.upsert()` de PyIceberg
- Proyecto: el primer puente CDC en vivo de Kiosko
- Presentación del módulo: el ensamble completo
- El brief: lo que Kiosko necesita saber en minutos, no mañana
- Ensamblando el pipeline completo: del productor a la alerta
- Corriendo la semana canónica, y coincidiendo con cada guía batch
- Corriendo el día roto, y viendo la alerta disparar
- Corriendo el puente CDC de punta a punta
- Lo que a Kiosko todavía le falta
- Proyecto: la primera plataforma de streaming de Kiosko
Dudas frecuentes
Lo que suele preguntarse
Sin límite. Es una guía gratuita: entras cuando quieras, las veces que quieras.
No. Los módulos están ordenados de menos a más, pero puedes saltar al que necesites. Tu progreso se guarda por lección.
Lo que haga falta está en «Qué necesitas traer», arriba. Si no aparece nada ahí, puedes empezar desde cero.
En el grupo de WhatsApp del Club, y cada quince días hay un live con un instructor donde se resuelven dudas en vivo.
Sí. Al terminar todas las lecciones se emite automáticamente, con un código verificable que puedes compartir en LinkedIn.
Empieza cuando quieras
Lo que dicen los estudiantes
Estas reseñas son de estudiantes inscritos que completaron al menos el 50% del curso. Moderamos las reseñas solo por motivos de contenido (spam, lenguaje ofensivo, datos personales), nunca por ser críticas o negativas.
Aún no hay reseñas aprobadas.
¡Sé el primero en compartir tu experiencia!