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 lideraall(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.