Sobes.tech
Junior — Middle

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.