Ako si Kafka spotrebiteľ uchováva svoju pozíciu v dátovom toku?
sobes.tech AI
Odpoveď od AI
V Apache Kafka si spotrebiteľ uchováva svoju pozíciu v dátovom toku pomocou posunov (offsetov). Offset je poradové číslo správy v partitione témy.
Spotrebiteľ periodicky potvrdzuje (commit) aktuálny offset, aby pri reštarte alebo chybe mohol pokračovať v čítaní od správneho miesta. Commit môže byť automatický (auto-commit) alebo manuálny.
V klientoch Kafka pre Go (napríklad sarama) je offset zvyčajne uložený v špeciálnom téme __consumer_offsets, ktoré spravuje Kafka. To umožňuje viacerým spotrebiteľom v skupine koordinovať čítanie a zabezpečiť, že každá správa bude spracovaná presne raz.
Príklad manuálneho commit-u offsetu v Go s použitím sarama:
partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)
for msg := range partitionConsumer.Messages() {
// spracovanie správy
fmt.Println(string(msg.Value))
// commit offsetu
consumer.MarkOffset(msg, "")
}
Týmto je pozícia spotrebiteľa v toku posledný potvrdený offset, ktorý je uložený v Kafka a umožňuje pokračovať v čítaní od správneho miesta.