Sobes.tech
Junior — Middle

Hoe slaat de consument in Kafka zijn positie in de datastroom op?

sobes.tech AI

Antwoord van AI

In Apache Kafka slaat de consument zijn positie in de datastroom op met behulp van offsets. Offset is het volgnummer van het bericht in de partition van een topic.

De consument commit periodiek de huidige offset, zodat hij bij herstart of storing kan hervatten vanaf de juiste plek. De commit kan automatisch (auto-commit) of handmatig zijn.

In Kafka-clients voor Go (bijvoorbeeld sarama) wordt de offset meestal opgeslagen in een speciaal topic __consumer_offsets, dat door Kafka zelf wordt beheerd. Dit stelt meerdere consumenten in een groep in staat om de leescoördinatie te behouden en te garanderen dat elk bericht precies één keer wordt verwerkt.

Voorbeeld van handmatige offset-commit in Go met sarama:

partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)

for msg := range partitionConsumer.Messages() {
    // berichtverwerking
    fmt.Println(string(msg.Value))
    // offset commit
    consumer.MarkOffset(msg, "")
}

Zo is de positie van de consument in de stroom de laatst gecommitteerde offset, die in Kafka wordt opgeslagen en waarmee het lezen vanaf de juiste plek kan worden hervat.