Sobes.tech
Junior — Middle

Jaki mechanizm gwarancji dostarczenia wiadomości był używany w Kafka w twojej poprzedniej pracy?

sobes.tech AI

Odpowiedź od AI

W Kafka gwarancje dostarczenia wiadomości są zapewniane przez konfigurację parametrów producenta i konsumenta, a także przez mechanizm potwierdzeń (acks) i zarządzanie przesunięciami (offsets).

Główne mechanizmy:

  • acks — parametr producenta, który określa, ile replik musi potwierdzić zapis wiadomości. Wartości:

    • 0 — nie czekać na potwierdzenie (niskie bezpieczeństwo)
    • 1 — czekać na potwierdzenie od lidera
    • all (lub -1) — czekać na potwierdzenie od wszystkich ISR (replik w synchronizacji), co zapewnia maksymalną niezawodność
  • Ponowne próby i idempotencja — producent może powtarzać wysyłanie wiadomości w przypadku błędów, a idempotencja zapobiega duplikatom.

  • Zatwierdzanie przesunięć (offset commit) — konsument po przetworzeniu wiadomości zatwierdza przesunięcia, aby zapewnić, że wiadomości nie będą przetwarzane ponownie.

W praktyce, aby zagwarantować dostarczenie "przynajmniej raz", używa się acks=all i producenta idempotentnego, a dla "dokładnie raz" — dodatkowych ustawień i obsługi na poziomie aplikacji.

Przykład konfiguracji producenta w Go (z użyciem sarama):

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Idempotent = true
config.Producer.Retry.Max = 5
producer, err := sarama.NewSyncProducer(brokers, config)

W ten sposób, mechanizm gwarancji dostarczenia to kombinacja potwierdzeń, replikacji i zarządzania przesunięciami.