Sobes.tech
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:

  1. 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).
  2. A mensagem é armazenada no log do broker.
  3. 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.