Sobes.tech
Senior

Каква гаранция за доставка ще използваме в Kafka?

sobes.tech AI

Отговор от AI

В Kafka обикновено се използва гаранцията за доставка " поне веднъж". Това означава, че съобщението ще бъде доставено на потребителя поне веднъж, но при сривове могат да се появят дублирания. За повишаване на надеждността и предотвратяване на загуба на данни Kafka използва потвърждения (acks), които могат да бъдат настроени:

  • acks=0 — производителят не чака потвърждение (по-малко надеждно)
  • acks=1 — потвърждение от лидера на партидата
  • acks=all (или -1) — потвърждение от всички реплики (максимална надеждност)

За гарантиране на "точно веднъж" доставка е необходима допълнителна логика от страна на потребителя и използване на транзакции в Kafka, което е по-сложно и не винаги оправдано.

Пример за конфигурация на продюсър в Go с гаранция "поне веднъж":

producer, err := sarama.NewSyncProducer(brokers, &sarama.Config{
    Producer: sarama.ProducerConfig{
        RequiredAcks: sarama.WaitForAll, // acks=all
        Retry:       sarama.NewRetry(5),
    },
})