Jak si spotřebitel v Kafka ukládá svou pozici v datovém toku?
sobes.tech AI
Odpověď od AI
V Apache Kafka si spotřebič ukládá svou pozici v datovém toku pomocí posunů (offsetů). Offset je pořadové číslo zprávy v partitionu tématu.
Spotřebič periodicky potvrzuje (commit) aktuální offset, aby při restartu nebo chybě mohl pokračovat ve čtení od správného místa. Commit může být automatický (auto-commit) nebo ruční.
V Go klientech Kafka (například sarama) je offset obvykle uložen v speciálním tématu __consumer_offsets, které spravuje Kafka. To umožňuje několika spotřebičům v skupině koordinovat čtení a zaručit, že každá zpráva bude zpracována přesně jednou.
Příklad ručního potvrzení offsetu v Go s použitím sarama:
partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)
for msg := range partitionConsumer.Messages() {
// zpracování zprávy
fmt.Println(string(msg.Value))
// potvrzení offsetu
consumer.MarkOffset(msg, "")
}
Tímto je pozice spotřebiče v toku poslední potvrzený offset, který je uložen v Kafka a umožňuje pokračovat ve čtení od správného místa.