La entrega exactly once sobre una red no es posible, pero el procesamiento exactly once sí lo es, dentro de ciertos límites. Kafka te da un productor idempotente más transacciones, así que un ciclo de leer, procesar y escribir dentro de Kafka confirma offsets y salida de forma atómica. De extremo a extremo sigues necesitando que el destino coopere, ya sea con una escritura transaccional o con un upsert idempotente sobre una clave estable. En la práctica, la mayoría de los equipos acaban con at least once más destinos idempotentes.
Por qué lo preguntan los entrevistadores
Esto es una prueba de profundidad sobre sistemas distribuidos. Las respuestas flojas dicen enable.idempotence igual a true y se quedan ahí. Los entrevistadores quieren oír la distinción entre entrega y procesamiento, el límite de alcance de las transacciones de Kafka (solo cubren topics de Kafka y offsets del consumidor) y la realidad pragmática de que son los destinos idempotentes los que de verdad hacen correcto un pipeline de extremo a extremo.
Cómo estructurar tu respuesta
- Separa la entrega exactly once del procesamiento exactly once.
- Explica el productor idempotente y qué duplicado elimina.
- Describe las transacciones que cubren salida y commit de offsets de forma atómica.
- Marca la frontera: los destinos externos no están dentro de la transacción.
- Aterriza en at least once más escrituras idempotentes como respuesta práctica.
Ejemplo de respuesta
Estrictamente, no. No puedes garantizar entrega exactly once sobre una red poco fiable, porque siempre se puede perder un acuse de recibo y el emisor tiene que elegir entre reenviar o descartar. Lo que Kafka sí te da es semántica de procesamiento exactly once dentro de Kafka. El productor idempotente añade un id de productor y un número de secuencia, así que un envío reintentado no crea un duplicado en la partición, y las transacciones te dejan confirmar tus registros de salida y tus offsets de consumidor de forma atómica, de modo que una topología de leer, procesar y escribir no cuenta dos veces cuando falla. El límite es el alcance. En cuanto escribes en Postgres o en S3, esa escritura queda fuera de la transacción. Así que lo que realmente construyo es entrega at least once con un destino idempotente, normalmente un merge sobre un id de evento o una clave natural. En un pipeline de clickstream deduplicábamos por event_id con una ventana de siete días, lo que salía más barato y era más fácil de razonar que intentar hacer transaccional cada salto.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué hace transactional.id y por qué importa al reiniciar?
- ¿Cómo deduplicarías un stream sin estado ilimitado?
- ¿Cuál es el coste de rendimiento de activar transacciones?
Más preguntas para Ingeniero de datos
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas