Kafka Consumer Rebalancing Algorithm

Czy ktoś może mi powiedzieć, czym jest algorytm równoważenia dla konsumentów Kafki? Chciałbym zrozumieć, jak liczenie partycji i wątki konsumenckie wpływają na to.

Dziękuję,

Author: NSA, 2015-02-18

2 answers

Ok więc w tej chwili są 2 algorytmy równoważenia - Range i RoundRobin. Są one również nazywane strategiami przypisywania partycji.

Dla uproszczenia Załóżmy, że mamy temat T1 z 10 partycjami, a także mamy 2 konsumentów o różnych konfiguracjach (aby przykład był jaśniejszy) - C1 z num.streams ustawionym na 1 i C2 z num.streams ustawionym na 2.

Oto Jak to działa ze strategiąRange:

Range określa dostępne partycje liczbowo porządek i wątki konsumpcyjne w porządku leksykograficznym. Tak więc w naszym przypadku kolejność partycji będzie 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a kolejność wątków konsumenckich będzie C1-0, C2-0, C2-1. Następnie liczba partycji jest dzielona przez liczbę wątków konsumenckich, aby określić, ile partycji powinien posiadać każdy wątek konsumencki. W naszym przypadku nie dzieli się jednakowo, więc wątek C1-0 otrzyma jedną dodatkową partycję. Ostateczne przypisanie partycji wyglądałoby tak:

C1-0 pobiera partycje 0, 1, 2, 3
C2-0 gets partycje 4, 5, 6
C2-1 pobiera partycje 7, 8, 9

Gdyby było 11 partycji, przypisanie partycji dla tych konsumentów zmieniłoby się nieco:

C1-0 dostanie partycje 0, 1, 2, 3
C2-0 dostanie partycje 4, 5, 6, 7
C2-1 dostałby partycje 8, 9, 10

To jest to.

Ta sama konfiguracja nie działa dla RoundRobin strategii, ponieważ wymaga równej num.streams dla wszystkich konsumentów subskrybujących ten temat, więc załóżmy, że obaj konsumenci mają Ustaw na 2. Jedną z głównych różnic w porównaniu ze strategią Range jest to, że nie można przewidzieć, jakie zadanie będzie miało miejsce przed przywróceniem równowagi. Oto, jak to działa ze strategią RoundRobin:

Po pierwsze, istnieją 2 warunki, które muszą być spełnione przed rzeczywistym przypisaniem:

A) każdy temat ma taką samą liczbę strumieni w instancji konsumenckiej (dlatego wspomniałem powyżej, że różna liczba wątków na konsumenta nie będzie działać)
b) Zestaw subskrybowanych tematy są identyczne dla każdej instancji konsumenckiej w grupie(mamy tutaj jeden temat, więc nie jest to teraz problem).

Gdy te 2 warunki są weryfikowane, pary topic-partition są sortowane według hashcode, aby zmniejszyć możliwość przypisania wszystkich partycji jednego tematu do jednego konsumenta (jeśli jest więcej niż jeden temat do wykorzystania).

I wreszcie, wszystkie topic-partition pary są przypisywane w sposób round-robin do dostępnych wątków konsumenckich. Na przykład, jeśli nasz temat-partycje będzie to sortowane w następujący sposób: T1-5, T1-3, T1-0, T1-8, T1-2, T1-1, T1-4, T1-7, T1-6, T1-9 i wątki konsumenckie są C1-0, C1-1, C2-0, C2-1 wtedy przypisanie będzie wyglądać tak:

T1-5 idzie do C1-0
T1-3 idzie do C1-1
T1-0 idzie do C2-0
T1-8 idzie do C2-1
W tym momencie nie ma już wątków konsumenckich, ale nadal jest więcej partycji tematycznych, więc iteracja nad wątkami konsumenckimi zaczyna się od nowa:
T1-2 idzie do C1-0
T1-1 idzie do C1-1
T1-4 idzie do C2-0
T1-7 idzie do C2-1
Oraz again:
T1-6 idzie do C1-0
T1-9 idzie do C1-1

W tym momencie wszystkie partycje tematyczne są przypisane, a każdy wątek konsumencki ma prawie taką samą liczbę partycji.

Mam nadzieję, że to pomoże.
 28
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
2015-02-18 09:54:38

Możesz przeczytać ten Kafka docs http://kafka.apache.org/documentation/#impl_brokerregistration o algorytmie rejestracji konsumentów i algorytmie równoważenia konsumentów

Jak już wspomniano, każdy konsument wykonuje następujące czynności podczas równoważenia:

1. For each topic T that C<sub>i</sub> subscribes to
2.   let P<sub>T</sub> be all partitions producing topic T
3.   let C<sub>G</sub> be all consumers in the same group as C<sub>i</sub> that consume topic T
4.   sort P<sub>T</sub> (so partitions on the same broker are clustered together)
5.   sort C<sub>G</sub>
6.   let i be the index position of C<sub>i</sub> in C<sub>G</sub> and let N = size(P<sub>T</sub>)/size(C<sub>G</sub>)
7.   assign partitions from i*N to (i+1)*N - 1 to consumer C<sub>i</sub>
8.   remove current entries owned by C<sub>i</sub> from the partition owner registry
9.   add newly assigned partitions to the partition owner registry
    (we may need to re-try this until the original partition owner releases its ownership)

A także zauważ, że:

Jeśli jest więcej konsumentów niż partycji, niektórzy konsumenci nie otrzymają żadnych danych w ogóle. Podczas balansowania staramy się przyporządkować partycje do konsumentów w taki sposób, aby zmniejszyć Liczba węzłów brokera, z którymi musi się połączyć każdy konsument.

 0
Author: GuangshengZuo,
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-07-24 01:30:41