Sobes.tech
Junior — Middle

Какъв механизъм за гарантиране на доставката на съобщения беше използван в 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)

Така механизмът за гарантиране на доставка е комбинация от потвърждения, репликация и управление на отместванията.