Odpowiedz

31

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ęć.

Powiązane problemy