Próbuję udostępnić zadanie wśród wielu wylewek. Mam sytuacji, gdzie dostaję jeden krotki/wiadomości naraz ze źródła zewnętrznego i chcę mieć wiele wystąpień dziobek główną intencją jest dzielenie obciążenia i zwiększyć wydajność wydajność.Wiele wylewek Storm-Kafka, jak podzielić ładunek?
Mogę zrobić to samo z jednym wylewem, ale chcę podzielić obciążenie na wiele wylewek. Nie jestem w stanie uzyskać logiki do rozłożenia obciążenia. Ponieważ przesunięcie komunikatów nie będzie znane, dopóki konkretna dziobek nie zakończy spożywania części (tj. W oparciu o ustawiony rozmiar bufora).
Czy ktoś może podać jasne światło na temat tego, w jaki sposób ćwiczyć logikę/algorytm?
Advance Dzięki za rozmowę.
Aktualizacja w odpowiedzi do odpowiedzi:
obecnie używane multi-partycji na Kafki (tj
5
)
Poniżej znajduje się kod używany:
builder.setSpout("spout", new KafkaSpout(cfg), 5);
Przetestowane przez powodzie z 800 MB
danych na każdej partycji i to wykonano ~22 sec
, aby zakończyć czytanie.
Znowu użył kodu z parallelism_hint = 1
tj builder.setSpout("spout", new KafkaSpout(cfg), 1);
Teraz zajęło więcej ~23 sec
! Czemu?
Według Burza Docs setSpout (deklaracji) jest następujący:
public SpoutDeclarer setSpout(java.lang.String id,
IRichSpout spout,
java.lang.Number parallelism_hint)
gdzie
parallelism_hint - jest liczbą zadań, które powinny być przypisane do wykonania tego dziobek. Każde zadanie zostanie uruchomione na wątku w procesie znajdującym się w pobliżu klastra.
Ohhh ... jesteś bogiem wysłanym. Uratowałeś mi życie. Miałem 5 partycji kafka i ustawiłem parallelism_hint z 3 w setSpout() i zastanawiałem się dlaczego moja topologia czyta tylko z 3 kafka partycji po ustawieniu parallelism_hint na 5 rozwiązało mój problem. Dzięki za wskazanie tego. – Shams