Sobes.tech
Junior — Middle

Kako se obezbeđuje mogućnost dostavljanja poruka najmanje jednom u Kafka?

sobes.tech АИ

Одговор од АИ

U Apache Kafka, isporuka poruka sa garancijom "najmanje jednom" obezbeđena je putem mehanizma potvrda (acknowledgments) i upravljanja ofsetima (offsets).

Proces izgleda ovako:

  1. Producent šalje poruku u Kafka i čeka potvrdu od brokera (npr., ack=all — potvrda od svih replika).
  2. Poruka se čuva u dnevniku (logovima) brokera.
  3. Potrošač čita poruku i nakon uspešne obrade šalje potvrdu (commit) ofseta (offset) u Kafka.

Ako potrošač padne pre potvrde, pri ponovnom pokretanju pročitaće poruku ponovo, čime se obezbeđuje isporuka "najmanje jednom".

Primer u Go sa bibliotekom sarama:

consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// U rukovaocu porukama:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
    for message := range claim.Messages() {
        process(message) // obrada poruke
        sess.MarkMessage(message, "") // potvrda obrade
    }
    return nil
}

Dakle, ako potvrda nije poslata, poruka će biti dostavljena ponovo.