Jak działa Zrównoważenie konsumentów w Kafka?

Gdy nowy konsument/brorker jest dodawany lub wyłączany, Kafka uruchamia operację równoważenia. Czy zmiana równowagi Kafki jest operacją blokującą? Czy konsumenci Kafki są blokowani podczas trwającej operacji przywracania równowagi?

Author: Jacek Laskowski, 2014-11-28

2 answers

Zależy co masz na myśli mówiąc "zablokowany". Jeśli masz na myśli "czy istniejące połączenia są zamknięte po uruchomieniu równoważenia", to odpowiedź brzmi tak. Obecny algorytm równoważenia Kafki jest niestety niedoskonały.

Oto, co dzieje się podczas zrównoważenia konsumentów.

Załóżmy, że mamy temat z 10 partycjami (0-9)i jednym konsumentem (nazwijmy go consumer1). Gdy pojawia się drugi konsument (consumer2), zadanie równoważenia uruchamia się dla obu z nich (consumer1 otrzymuje event, consumer2 wykonuje początkowy balans). Teraz consumer1 zamyka wszystkie istniejące połączenia (nawet te, które wkrótce zostaną ponownie otwarte) i zwalnia własność partycji w Zookeeper dla wszystkich 10 partycji.

Następnie uruchamia algorytm przypisywania partycji i decyduje o tym, które partycje powinny zostać odebrane i ponownie domaga się własności partycji w Zookeeperze. Jeśli twierdzenie się powiodło consumer1 zaczyna pobierać swoje nowe partycje.

Tymczasem consumer2 uruchamia przypisanie partycji algorytm, a także stara się rościć sobie prawa do partycji również w Zookeeper. Claim powiedzie się tylko wtedy, gdy consumer1 zwolni własność na tych partycjach. Po pomyślnym uruchomieniu żądania consumer2 lub po nieudanym odebraniu partycji w ramach określonej liczby powtórzeń otrzymujemy wyjątek rebalance failed after n retries.

Jak zauważyłeś, zamiast po prostu zamykać połączenia i zwalniać własność partycji consumer1 nie jest już własnością, niepotrzebnie zamyka wszystkie swoje połączenia i uruchamia się ponownie za pomocą mniejsza ilość przegród. Ta sama historia z dodawaniem partycji (gdy zużyjemy filtr wieloznaczny i pojawi się nowy temat) - wszystkie połączenia są zamykane, a następnie otwierane ponownie zamiast tylko otwierać nowe.

Więc mam nadzieję, że to odpowiada na twoje pytanie - pobieranie zatrzymuje się, gdy rozpocznie się balans.

 51
Author: serejja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-02 12:25:30

Zaakceptowana odpowiedź powyżej (od serejja) była w przeszłości poprawna. Kafka zaimplementowała "Incremental Cooperative Rebalancing" od wersji 2.3 (Data Wydania czerwiec 2019) i wyżej. Tak więc teraz nie ma potrzeby, aby wszyscy konsumenci zaprzestali przetwarzania ("stop the world event"), aby zrównoważyć pracę w grupie fe. gdy nowy konsument pojawia się w grupie lub jakiś konsument przechodzi w tryb offline.

Aby uzyskać więcej informacji zobacz: From Eager to Smarter in Apache Kafka Consumer Rebalances

 1
Author: user2851729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-07 09:48:16