Sobes.tech
Junior — Middle

Kā Kafka patērētājs saglabā savu pozīciju datu plūsmā?

sobes.tech AI

Atbilde no AI

Apache Kafka patērētājs saglabā savu pozīciju datu plūsmā, izmantojot nobīdes (offsets). Offset ir ziņojuma kārtas numurs tēmas daļā.

Patērētājs periodiski veic (commit) pašreizējā offset saglabāšanu, lai, pārstartējot vai sastopoties ar kļūdu, varētu turpināt lasīt no pareizās vietas. Commit var būt automātisks (auto-commit) vai manuāls.

Go klientos Kafka (piemēram, sarama), offsets parasti tiek saglabāts īpašā temā __consumer_offsets, ko pārvalda pati Kafka. Tas ļauj vairākiem patērētājiem grupā koordinēt lasīšanu un nodrošināt, ka katrs ziņojums tiek apstrādāts tieši vienu reizi.

Manuāla offset commit piemērs Go ar sarama:

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

for msg := range partitionConsumer.Messages() {
    // ziņojuma apstrāde
    fmt.Println(string(msg.Value))
    // offset saglabāšana
    consumer.MarkOffset(msg, "")
}

Tādējādi patērētāja pozīcija plūsmā ir pēdējais apstiprinātais offset, kas tiek saglabāts Kafka un ļauj atsākt lasīšanu no pareizās vietas.