Po dodaniu lub opuszczeniu nowego konsumenta/brokera, Kafka uruchamia operację równoważenia. Czy Kafka Rebalancing jest operacją blokującą. Czy konsumenci Kafki są zablokowani podczas operacji równoważenia?Jak działa rebalancing konsumenta w Kafce?
Odpowiedz
Zależy od tego, co masz na myśli przez "zablokowany". Jeśli masz na myśli "czy istniejące połączenia są zamknięte, gdy wynurza się rebalans", odpowiedź brzmi "tak". Obecny algorytm przywracania równowagi Kafki jest niestety niedoskonały.
Oto, co dzieje się podczas przywracania równowagi konsumentom.
Załóżmy, że mamy temat z 10 partycjami (0-9) i jednym konsumentem (pozwala wymienić go na consumer1
). Gdy pojawia się drugi konsument (consumer2
), zadanie ponownego wyzwolenia wyzwala dla nich obu (consumer1
otrzymuje dane zdarzenie, consumer2
dokonuje wstępnego ponownego wyważenia). Teraz consumer1
zamyka wszystkie istniejące połączenia (nawet te, które zostaną wkrótce ponownie otwarte) i zwalnia własność partycji w Zookeeperze dla wszystkich 10 partycji.
Następnie uruchamia algorytm przydziału partycji i decyduje, które partycje powinny zostać odebrane i ponownie przypisuje prawa własności do partycji w Zookeeperze. Jeśli roszczenie powiodło się, consumer1
rozpoczyna pobieranie nowych partycji.
W międzyczasie consumer2
uruchamia również algorytm przypisywania partycji i stara się również o jego partycje w Zookeeperze. Roszczenie zakończy się powodzeniem tylko wtedy, gdy consumer1
zwalnia własność tych partycji. Gdy roszczenie powiodło się, consumer2
rozpoczyna pobieranie lub jeśli nie uda się odebrać partycji w ramach określonej liczby ponownych prób, otrzymasz wyjątek od rebalance failed after n retries
.
Jak zauważył, zamiast po prostu zamknięcie połączenia i uwolnienia własności przegród consumer1
nie posiadają już, to niepotrzebnie zamyka wszystkie swoje połączenia i restartuje tylko z mniejszej ilości partycji. Ta sama historia z dodawaniem partycji (kiedy korzystamy z filtra wieloznacznego i pojawia się nowy temat) - WSZYSTKIE połączenia są zamykane, a następnie otwierane ponownie, zamiast otwierania nowych.
Mam nadzieję, że to odpowie na twoje pytanie - pobieranie zatrzymuje się po ponownym wyrzuceniu kopnięć.