Co oznacza "Zrównoważenie" w kontekście Apache Kafka?

Jestem nowym użytkownikiem Kafki i testuję go od około 2-3 tygodni. Wierzę, że w tej chwili mam dobre zrozumienie, jak Kafka działa w większości przypadków, ale po próbie dopasowania API dla mojego własnego konsumenta Kafka( jest to niejasne, ale postępuję zgodnie z wytycznymi dla nowego KafkaConsumer, który ma być dostępny dla v 0.9, który jest na ATM "trunk" repo) miałem problemy z opóźnieniami zużywające się z tematu, jeśli mam wielu konsumentów z tym samym groupID.

W tej konfiguracji moja konsola konsekwentnie rejestruje problemy związane z wyzwalaniem balansu. Czy rebalancje występują, gdy dodaję nowych konsumentów do grupy konsumenckiej i czy są one uruchamiane, aby dowiedzieć się, która instancja konsumencka w tej samej grupie otrzyma które partycje lub czy rebalancje są używane do czegoś innego całkowicie?

Natknąłem się również na ten fragment z https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9 + Consumer+Rewrite + Design i po prostu wydaje mi się, że nie mogę tego zrozumieć, więc jeśli ktoś mógłby mi pomóc zrozumieć to byłoby bardzo mile widziane:

Równoważenie jest procesem, w którym grupa instancji konsumenckich (należący do tej samej grupy) koordynować posiadanie wzajemnie wykluczającej się zestaw partycji tematów, na które subskrybowana jest grupa. Na koniec udanej operacji równoważenia dla grupy konsumenckiej, co partycja dla wszystkich subskrybowanych tematów będzie własnością jednego konsumenta instancja w Grupa. Sposób działania równoważenia wygląda następująco. Każdy broker jest wybierany jako koordynator dla podzbioru grupy konsumentów. Pośrednik koordynator grupy jest odpowiedzialny za zorganizowanie operacji równoważenia członkostwa w grupie konsumenckiej zmiany lub zmiany partycji dla subskrybowanych tematów. Jest to również odpowiedzialny za przekazanie wynikowej własności partycji konfiguracja dla wszystkich konsumentów grupy poddawanych równoważeniu operacja.

Author: ha9u63ar, 2015-06-22

3 answers

Gdy nowy konsument dołącza do grupy konsumentów, zestaw konsumentów próbuje "zrównoważyć" obciążenie, aby przypisać partycje każdemu konsumentowi. Jeśli zestaw konsumentów zmieni się podczas tego przypisania, balans nie powiedzie się i spróbuj ponownie. To ustawienie kontroluje maksymalną liczbę prób przed poddaniem się.

Komenda na to: rebalance.max.powtarza i jest domyślnie ustawiona na 4.

Również może się zdarzyć, jeśli prawda jest następująca:

Sesja ZooKeeper przerwa. Jeśli konsument nie zdąży do ZooKeeper na ten okres czasu, jest on uważany za martwy i nastąpi przywrócenie równowagi.

Mam nadzieję, że to pomoże!

 60
Author: George Davis,
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
2015-06-22 19:21:45

Każdemu konsumentowi w grupie konsumenckiej przypisana jest wyłącznie jedna lub więcej partycji tematycznych, a Rebalance jest ponownym przypisaniem własności partycji między konsumentami.

A Rebalance dzieje się, gdy:

  • konsument dołącza do grupy
  • konsument zamyka się czysto
  • Koordynator grupy uważa, że konsument nie żyje. Może to nastąpić po awarii lub gdy konsument jest zajęty długotrwałym przetwarzaniem, co oznacza, że nie heartbeats zostało wysłane w międzyczasie przez konsumenta do koordynatora grupy w skonfigurowanym interwale sesji
  • dodawane są nowe partycje


Jako koordynator grupy (jeden z brokerów w klastrze) i lider grupy (pierwszy konsument, który dołącza do grupy) wyznaczony dla grupy konsumenckiej, Rebalance można mniej więcej opisać następująco:

  • lider otrzymuje listę wszystkich konsumentów w grupie od na koordynator grupy (obejmie to wszystkich konsumentów, którzy wysłali bicie serca Ostatnio i które w związku z tym są uważane za żywe) i jest odpowiedzialny za przypisanie podzbioru partycji każdemu konsumentowi.
  • po podjęciu decyzji o przypisaniu partycji (Kafka ma kilka wbudowanych zasad przypisywania partycji), lider grupy wysyła listę zadań dla koordynatora grupy , który wysyła ten informacje dla wszystkich konsumentów.


Dotyczy to Kafki 0.9, ale jestem pewien, że dla nowszych wersji nadal jest ważna.

 43
Author: vortex.alex,
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
2017-10-18 05:51:43

Rebalance konsumenta zdecyduj, który konsument jest odpowiedzialny za który podzbiór wszystkich dostępnych partycji dla danego tematu(tematów). Na przykład możesz mieć temat z 20 partycjami i 10 konsumentami; pod koniec równoważenia możesz oczekiwać, że każdy konsument będzie czytał z 2 partycji. Jeśli wyłączysz 10 z tych konsumentów, możesz oczekiwać, że każdy konsument będzie miał 1 partycję po zakończeniu równoważenia. Consumer rebalance to dynamiczne przypisywanie partycji, które może obsługiwać automatycznie przez Kafka.

Koordynator grupy jest jednym z brokerów odpowiedzialnych za komunikację z konsumentami w celu osiągnięcia równowagi między consumers.In wcześniejsza wersja Zookeeper przechowuje szczegóły metadanych, ale najnowsza wersja przechowuje na brokerach. Koordynatorzy konsumentów otrzymują bicie serca i ankiety od wszystkich konsumentów z grup konsumenckich, więc miej świadomość bicia serca każdego konsumenta i zarządzaj jego przesunięciem na partycjach.

Lider Grupy: Jedna z prac grupy konsumenckiej jako lider grupy, który jest wybierany przez koordynatora grupy i będzie odpowiedzialny za podejmowanie decyzji podziału w imieniu wszystkich konsumentów w grupie.

Scenariusz Równoważenia:

  1. Grupa konsumentów subskrybuje dowolne tematy

  2. Instancja konsumencka nie mogła wysłać bicia serca podczas sesji.serce.przedział czasu.

  3. Konsument długi proces przekracza limit czasu ankiety

  4. Konsument Grupa konsumentów poprzez wyjątek

  5. Dodano nową partycję.

  6. Skalowanie w górę i w dół konsumenta. Dodano nowego konsumenta lub ręcznie usuń istniejącego konsumenta dla

Równowaga Konsumencka

Zrównoważenie konsumenta inicjowane, gdy konsument poprosi o dołączenie do grupy lub jej opuszczenie. Lider grupy otrzymuje od koordynatora grupy listę wszystkich aktywnych konsumentów. Lider grupy decyduje o podziale(partycjach) przypisanym każdemu konsumentowi za pomocą PartitionAssigner. Gdy lider grupy sfinalizuje przypisanie partycji, wysyła listę przypisań do koordynatora grupy, który odsyła te informacje do wszystkich konsumentów. Grupa wysyła tylko odpowiednie partycje do swojego konsumenta, a nie do innych partycji przypisanych konsumentowi. Tylko lider grupy świadomy wszystkich konsumentów i ich przypisanych partycji. Po zakończeniu balansu konsumenci zaczynają wysyłać bicie serca do koordynatora grupy, że żyje. Konsumenci wysyłają zapytanie OffsetFetch do grupy Koordynator, aby uzyskać Ostatnie popełnione przesunięcia dla przydzielonych partycji. Konsumenci zaczynają konsumować wiadomości dla nowo przypisanej partycji.

Zarządzanie Państwem

Podczas równoważenia, koordynator grupy ustawił swój stan na równoważenie i czekał, aż wszyscy konsumenci ponownie dołączą do grupy.

Kiedy grupa zaczyna równoważenie, koordynator grupy najpierw zmienia swój stan na równoważenie, aby wszyscy wchodzący w interakcję konsumenci zostali powiadomieni o ponownym dołączeniu do grupy. Po przywróceniu równowagi ukończony koordynator grupy Utwórz identyfikator nowej generacji i powiadom wszystkich konsumentów, a grupa przejdź do etapu synchronizacji, w którym konsumenci wysyłają żądanie synchronizacji i przejdź do poczekania, aż lider grupy zakończy generowanie nowej partycji przypisania. Gdy konsumenci otrzymali nową przydzieloną partycję, przenieśli się do stabilnego etapu.

Tutaj wpisz opis obrazka

Członkostwo Statyczne

To zrównoważenie jest dość ciężką operacją, ponieważ wymagało zatrzymania wszystkich konsumentów i oczekiwania na przydzielenie nowego partycja. Przy każdym zrównoważeniu zawsze Utwórz identyfikator nowej generacji, czyli odśwież wszystko. Aby rozwiązać ten napowietrzny Kafka 2.3 + wprowadził członkostwo statyczne w celu zmniejszenia niepotrzebnego balansu. KIP-345

W Static Membership, stan konsumenta będzie się utrzymywał, a po przywróceniu równowagi zostanie zastosowane to samo przypisanie. Wykorzystuje nowy group.instance.id aby zachować tożsamość członka. Więc nawet w najgorszym scenariuszu member id dostać przetasowania, aby przypisać nową partycję, ale nadal, ten sam Consumer instance-id otrzyma to samo przypisanie partycji

instanceId: A, memberId: 1, assignment: {0, 1, 2}
instanceId: B, memberId: 2, assignment: {3, 4, 5}
instanceId: C, memberId: 3, assignment: {6, 7, 8}

I po restarcie:

instanceId: A, memberId: 4, assignment: {0, 1, 2}
instanceId: B, memberId: 2, assignment: {3, 4, 5}
instanceId: C, memberId: 3, assignment: {6, 7, 8}   

Ref:

  1. Https://www.confluent.io/blog/kafka-rebalance-protocol-static-membership

  2. Https://cwiki.apache.org/confluence/display/KAFKA/KIP-345%3A+Introduce+static+membership+protocol+to+reduce+consumer+rebalances

 7
Author: sun007,
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-09-25 17:09:51