Pergunta de entrevista para Engenheiro de Dados

Entrega exactly once é realmente possível no Kafka, e como você a alcançaria na prática?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Entrega exactly once através de uma rede não é possível, mas processamento exactly once é, dentro de certos limites. O Kafka oferece um producer idempotente somado a transações, então um ciclo read process write dentro do Kafka comita offsets e saída de forma atômica. De ponta a ponta, você ainda precisa que o destino coopere, seja com uma escrita transacional, seja com um upsert idempotente em uma chave estável. Na prática, a maioria dos times fica com at least once mais destinos idempotentes.

Por que os entrevistadores perguntam isso

Essa é uma checagem de profundidade em raciocínio sobre sistemas distribuídos. Respostas fracas dizem enable.idempotence igual a true e param por aí. Os entrevistadores querem ouvir a distinção entre entrega e processamento, o limite de escopo das transações do Kafka (elas só cobrem tópicos do Kafka e offsets de consumidor) e a realidade pragmática de que destinos idempotentes são o que de fato deixa um pipeline correto de ponta a ponta.

Como estruturar sua resposta

  • Separe entrega exactly once de processamento exactly once.
  • Explique o producer idempotente e qual duplicata ele elimina.
  • Descreva as transações cobrindo saída e commit de offset de forma atômica.
  • Diga o limite: destinos externos não estão dentro da transação.
  • Termine em at least once mais escritas idempotentes como a resposta prática.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Estritamente falando, não. Você não consegue garantir entrega exactly once através de uma rede não confiável, porque um reconhecimento sempre pode se perder e o remetente tem que escolher entre reenviar ou descartar. O que o Kafka de fato oferece é semântica de processamento exactly once dentro do Kafka. O producer idempotente adiciona um id de producer e um número de sequência, então um envio repetido não cria uma duplicata na partição, e as transações permitem comitar os seus registros de saída e os seus offsets de consumidor de forma atômica, então uma topologia read process write não conta em dobro em caso de falha. O limite é o escopo. No momento em que você escreve no Postgres ou no S3, essa escrita está fora da transação. Então o que eu realmente construo é entrega at least once com um destino idempotente, normalmente um merge em um id de evento ou em uma chave natural. Em um pipeline de clickstream nós deduplicávamos por event_id com uma janela de sete dias, o que era mais barato e mais fácil de raciocinar do que tentar tornar cada salto transacional.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • O que o transactional.id faz e por que ele importa no restart?
  • Como você deduplicaria um stream sem estado ilimitado?
  • Qual é o custo de performance de habilitar transações?

Mais perguntas para Engenheiro de Dados

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot