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.