Sobes.tech
Junior — Middle

Hoe wordt de mogelijkheid tot het leveren van berichten minstens één keer in Kafka gegarandeerd?

sobes.tech AI

Antwoord van AI

In Apache Kafka wordt de levering van berichten met de garantie "ten minste één keer" verzekerd door het mechanisme van acknowledgments en het beheer van offsets.

Het proces ziet er als volgt uit:

  1. De producer stuurt een bericht naar Kafka en wacht op bevestiging van de broker (bijvoorbeeld, ack=all — bevestiging van alle replicas).
  2. Het bericht wordt opgeslagen in het logboek van de broker.
  3. De consumer leest het bericht en stuurt na succesvolle verwerking een bevestiging (commit) van de offset naar Kafka.

Als de consumer crasht voordat hij bevestigt, leest hij het bericht opnieuw bij herstart, wat de "ten minste één keer" levering garandeert.

Voorbeeld in Go met de sarama-bibliotheek:

consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// In de berichtverwerker:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
    for message := range claim.Messages() {
        process(message) // berichtverwerking
        sess.MarkMessage(message, "") // bevestiging van verwerking
    }
    return nil
}

Dus, als de bevestiging niet wordt verzonden, wordt het bericht opnieuw afgeleverd.