Sobes.tech
Junior — Middle

Kako Kafka potrošač čuva svoju poziciju u toku podataka?

sobes.tech АИ

Одговор од АИ

U Apache Kafka, potrošač čuva svoju poziciju u toku podataka pomoću pomaka (offsets). Offset je redni broj poruke u particiji teme.

Potrošač povremeno potvrđuje (commit) trenutni offset, kako bi prilikom ponovnog pokretanja ili kvara mogao da nastavi čitanje sa pravog mesta. Commit može biti automatski (auto-commit) ili ručni.

U Kafka klijentima za Go (npr. sarama), offset se obično čuva u posebnoj temi __consumer_offsets, koju upravlja Kafka. To omogućava više potrošača u grupi da koordiniraju čitanje i garantuju da je svaka poruka obrađena tačno jednom.

Primer ručnog commit-a offset-a u Go koristeći sarama:

partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)

for msg := range partitionConsumer.Messages() {
    // obrada poruke
    fmt.Println(string(msg.Value))
    // commit offset-a
    consumer.MarkOffset(msg, "")
}

Tako je pozicija potrošača u toku poslednji potvrđeni offset, koji se čuva u Kafka i omogućava nastavak čitanja sa pravog mesta.