Junior — Middle
Como é garantida a possibilidade de entrega de mensagens pelo menos uma vez no Kafka?
sobes.tech IA
Resposta da IA
No Apache Kafka, a entrega de mensagens com garantia de "pelo menos uma vez" é assegurada pelo mecanismo de confirmações (acknowledgments) e pela gestão de deslocamentos (offsets).
O processo é o seguinte:
- O produtor envia uma mensagem ao Kafka e aguarda a confirmação do broker (por exemplo, ack=all — confirmação de todas as réplicas).
- A mensagem é armazenada no log do broker.
- O consumidor lê a mensagem e, após um processamento bem-sucedido, envia uma confirmação (commit) do deslocamento (offset) ao Kafka.
Se o consumidor falhar antes de confirmar, ao reiniciar, ele lerá a mensagem novamente, garantindo a entrega "pelo menos uma vez".
Exemplo em Go usando a biblioteca sarama:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// No manipulador de mensagens:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // processamento da mensagem
sess.MarkMessage(message, "") // confirmação do processamento
}
return nil
}
Portanto, se a confirmação não for enviada, a mensagem será entregue novamente.