Sobes.tech
Junior — Middle

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.