Pular para o conteúdo principal

Pergunta 34 de 50

O que é Retry?

PlenoSênior

Pergunta

"O que é Retry no contexto de processamento de mensagens Kafka?"

O que o entrevistador quer avaliar

Se você diferencia erro transitório de permanente, que é a base para saber quando retry ajuda e quando é desperdício de tentativas.

Resposta rápida

Retry é tentar processar novamente uma mensagem que falhou, na expectativa de que o erro seja transitório (timeout de rede, banco momentaneamente indisponível). Geralmente combinado com backoff (um intervalo crescente entre tentativas) para não sobrecarregar um sistema já instável.

Resposta nível Sênior

Retry só faz sentido para erros transitórios, falhas com chance real de não se repetir em uma nova tentativa. Para erros permanentes (payload malformado, regra de negócio que sempre rejeita aquele dado), retry é inútil: vai falhar da mesma forma indefinidamente, a menos que exista um limite de tentativas, depois do qual a mensagem segue para uma DLQ. No Kafka, a implementação mais robusta usa um tópico de retry dedicado: a mensagem que falha é republicada nele com um cabeçalho indicando quantas tentativas já ocorreram, e um listener separado a reprocessa após o backoff, sem bloquear o tópico principal (evitando o efeito poison pill).

Explicação aprofundada

Veja "Retry e Backoff" e "Retry Topic" no Capítulo 9.

Exemplo financeiro

Se o saldo-service falha ao processar um evento porque o banco está momentaneamente indisponível, o Spring Kafka reprocessa com backoff de 1s, 5s e 30s antes de considerar a mensagem não recuperável e encaminhá-la para a DLQ.

"Retry resolve qualquer tipo de erro, basta tentar mais vezes"

Retry só resolve erros transitórios. Para um erro permanente (ex.: payload que nunca vai desserializar corretamente), tentar de novo indefinidamente só atrasa a detecção do problema real e pode travar o processamento de mensagens seguintes.

Pode vir a seguir

Prováveis follow-ups: "o que é DLQ?" e "o que é uma Poison Pill?".

Capítulos relacionados