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),
},
})