Napotkałem pytanie z równoważeniem obciążenia w kafejce. Stworzyłem więc temat z 10 partycjami i utworzyłem 2 klientów. Dziesięć partycji zostało podzielonych i przypisanych do tych konsumentów (5 partycji do pierwszej i 5 do drugiej) i działa dobrze. Czasami pierwszy konsument pracuje, czasem drugi.Jak ładuje się saldo kafka?
Ale w pewnym momencie możemy spotkać się z sytuacją, gdy na przykład drugi konsument otrzymuje wiadomość i potrzeba czasu (na przykład 10 minut) na obsłużenie tej wiadomości.
Moje pytanie brzmi: jak kafka zdecyduje, w której partycji przechowywać wiadomość?
W tym przypadku robota typu round robin nie jest dobrym pomysłem, ponieważ wiadomości w partycjach obsługiwanych przez drugiego użytkownika nie będą obsługiwane, dopóki drugi konsument nie zakończy długich prac.
Zaktualizowano!
Zgodnie z odpowiedzią @Milan Baran obciążenie jest zrównoważone po stronie producenta. Ale w tym przypadku, nawet jeśli zapewniamy niestandardową realizację, będzie to ten sam problem, że wiadomość, która była przechowywana w partycji, która została przypisana konsumentowi, który wykonuje długoterminową pracę, nie zostanie przetworzona, dopóki ten konsument kończy swoją długoterminową pracę.
Być może gdzieś jest dodatkowy system równoważenia obciążenia?
Dlaczego po prostu nie uruchomisz większej liczby klientów? Jeśli uruchomisz 10 klientów, a następnie jeden będzie zajęty przez dłuższy czas, nadal będziesz mieć 9 dodatkowych operacji przetwarzania danych na pozostałych 9 partycjach. –
Jednak wszystkie wiadomości na partycji 10-owej nie są przetwarzane, dopóki nie są zajęte. Oto problem. –
Czy możesz napisać niestandardowy program do partycjonowania, który umieszcza długie komunikaty w specjalnej partycji, aby wszystkie małe mogły być partycjonowane i przetwarzane na pozostałych partycjach? –