Какъв механизъм за гарантиране на доставката на съобщения беше използван в Kafka на вашето предишно място на работа?
sobes.tech AI
Отговор от AI
В Kafka гаранциите за доставка на съобщения се осигуряват чрез настройките на параметрите на производителя и потребителя, както и чрез механизма за потвърждения (acks) и управлението на отместванията (offsets).
Основни механизми:
-
acks — параметър на производителя, който определя колко реплики трябва да потвърдят записа на съобщението. Стойности:
0— не чака потвърждение (ниска надеждност)1— чака потвърждение от лидераall(или-1) — чака потвърждение от всички ISR (синхронизирани реплики), което осигурява максимална надеждност
-
Повторни опити и идемпотентност — производителят може да повтори изпращането на съобщения при грешки, а идемпотентността предотвратява дублиране.
-
Потвърждаване на отместванията (offset commit) — потребителят след обработка на съобщенията извършва commit на отместванията, за да гарантира, че съобщенията няма да бъдат обработени повторно.
На практика за гарантиране на доставка "поне веднъж" се използва acks=all и идемпотентен производител, а за "точно веднъж" — допълнителни настройки и обработка на ниво приложение.
Пример за настройка на производител в Go (с използване на sarama):
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Idempotent = true
config.Producer.Retry.Max = 5
producer, err := sarama.NewSyncProducer(brokers, config)
Така механизмът за гарантиране на доставка е комбинация от потвърждения, репликация и управление на отместванията.