Sobes.tech
Middle+

O Kafka garante a entrega de mensagens? Pode o Kafka perder uma mensagem se o produtor não receber um erro?

sobes.tech IA

Resposta da IA

O Kafka garante a entrega de mensagens, mas com certas condições e configurações.

Por padrão, o Kafka suporta três níveis de entrega:

  • No máximo uma vez — as mensagens podem ser perdidas se o produtor não receber confirmação.
  • Pelo menos uma vez — as mensagens não se perdem, mas podem ser duplicadas.
  • Exatamente uma vez — configuração complexa que garante entrega sem perdas e sem duplicados.

Se o produtor não receber erro, isso significa que a mensagem foi aceita pelo broker e registrada no log, portanto, a perda é improvável. No entanto, se o produtor não receber confirmação devido a problemas de rede, a mensagem pode ser reenviada, o que causará duplicados.

Exemplo de configuração do produtor em Go com confirmações:

producer, err := sarama.NewSyncProducer(brokers, &sarama.Config{
    Producer: sarama.ProducerConfig{
        RequiredAcks: sarama.WaitForAll, // esperar confirmação de todas as réplicas
        Retry: sarama.ProducerRetry{
            Max: 5,
        },
    },
})

Assim, o Kafka não perde mensagens com uma configuração e tratamento de erros corretos, mas é importante gerenciar corretamente as confirmações e erros no lado do produtor.