2013-03-20 15 views
35

Pracuję z Storm i jest w porządku dla wielu przypadków użycia. Ostatnio rzuciłem okiem na Trident, która jest abstrakcją burzy na wysokim poziomie. Obsługuje on przetwarzanie dokładnie-raz i ułatwia stanowe przetwarzanie.Storm vs. Trident: Kiedy nie używać Trident?

Ale teraz się zastanawiam .. Dlaczego nie mogę zawsze używać Trident zamiast Storm?

co czytałem do tej pory:

  • Trident przetwarza wiadomości w partiach, więc przepustowość czas może być dłuższy.
  • Trident nie jest jeszcze w stanie przetwarzać pętli w topologiach.

Czy istnieją inne wady podczas używania Trident zamiast Storm? W tej chwili uważam, że wady wymienione powyżej są marginalne.

Jakie zastosowania nie można zastosować w Trident?


Aftermath:

Ponieważ zadałem pytanie moja firma zdecydowała się pójść na Trident pierwszy. Użyjemy czystej burzy tylko wtedy, gdy wystąpią problemy z wydajnością. Niestety nie była to aktywna decyzja, która stała się domyślnym zachowaniem (nie było mnie wtedy w pobliżu).

Założono, że w większości przypadków potrzebujemy stanu lub tylko raz przetwarzania lub będziemy potrzebować go w najbliższej przyszłości. Rozumiem ich rozumowanie, ponieważ przejście z Burzy na Trident lub z powrotem nie jest łatwą transformacją, ale moim zdaniem koncepcja przetwarzania strumienia bez stanu nie była zrozumiała dla wszystkich i to był główny powód używania Trident.

+1

Chyba nie zrozumiałeś: Trident jest coś, co działa na szczycie Storm i zastępuje starą koncepcję topologii transakcyjnych. Oczywiście możesz zawsze użyć Trident zamiast Core Storm. –

+0

Cześć Gordon, wiem, że Trident biegnie na szczycie Burzy. Z tego powodu zastanawiam się, dlaczego i tak powinienem Storm. Wygląda na to, że interfejs API Storm na niższym poziomie jest potrzebny tylko w rzadkich przypadkach. –

+2

Jak już zrozumiałem, kiedy masz miliony zdarzeń, czas przetwarzania partii nie jest duży (część sekund przypuszczam), ale obciążenie bazy danych jest zmniejszone. Myślę, że jest możliwe wprowadzenie limitu czasu i mieć dodatkowe wydarzenie. I tak, Trident jest abstrakcją wysokiego poziomu nad burzą, a ty możesz i powinieneś używać burzowego API dla czegoś niestandardowego. – Alex

Odpowiedz

39

Aby odpowiedzieć na pytanie: kiedy nie należy używać Trident? Kiedy tylko możesz sobie na to pozwolić.

Trident zwiększa złożoność topologii Storm, obniża wydajność i generuje stan. Zadaj sobie pytanie: czy potrzebujesz "dokładnie raz" semantyki przetwarzania Trident lub czy możesz żyć z "co najmniej raz" semantyką przetwarzania Storm. Dokładnie raz, użyj Trident, inaczej nie.

Chciałbym również podkreślić fakt, że Storm gwarantuje, że wszystkie wiadomości zostaną przetworzone. Niektóre wiadomości mogą być przetwarzane więcej niż raz.

18

Jeśli najniższym możliwym opóźnieniem jest twój cel i nie potrzebujesz dokładnie jednokrotnego przetworzenia, użycie Storm jest lepsze niż Trident.

4

Trident to abstrakcja wysokiego poziomu do robienia obliczeń w czasie rzeczywistym na bazie Storm Storm, dostępna w Storm 0.8.x. Storm jest strukturą przetwarzania strumienia bezstanowego, a Trident zapewnia przetwarzanie strumienia stanowego.

+0

Witam, zaktualizowałem moje pytanie, aby było bardziej zrozumiałe: Jakie przypadki użycia nie mogą zostać zaimplementowane w Trident? –

+0

Witam, jeśli nie potrzebujesz przetwarzania stanowego, użycie Trident byłoby marnowaniem zasobów (CPU, RAM, ...), ponieważ przechowuje stany w zewnętrznej bazie danych w pamięci. –

+1

Jeśli nie śledzisz stanu, Trident nie "skompiluje" dodatkowego obciążenia. W rzeczywistości "kompilator" Tridenta generuje bardziej wydajne topologie niż ja. Zawiera naprawdę zoptymalizowane, wydajne funkcje pomocnicze, których nie trzeba samemu kodować. – ChrisCantrell

1

Chris, ponieważ te dwa z nich są technologiami open source, trójząb służy jedynie jako implementacja scenariusza na szczycie burzy, co oczywiście spowodowało wzrost wydajności. Jeśli trójząb nie może spełnić twoich wymagań, tworzymy własną implementację państwową na szczycie burzy. Trident przyniósł projekty na wyższym poziomie, takie jak Trident-ML w czasie.

+0

Cześć, w rzeczywistości Trident spełnia wszystkie moje wymagania, dlatego zapytałem, dlaczego wciąż potrzebujemy zwykłej burzy. –

+1

Następnie możemy odpowiedzieć na twoje pytanie, takie jak; jeśli trójząb nie spełnia Twoich wymagań dotyczących wydajności, możesz wdrożyć własne, bardziej wydajne, stanowe ramy na czas burzy – HakkiBuyukcengiz

0

załóżmy, że chcemy wykonać filtrowanie + dodanie pola do krotki. jeśli używamy burzy, zwykle używamy 2 botów do filtrowania, dodawania pola. więc znowu musimy wysłać krotkę na nowy rygiel, ponieważ może używać globalnego grupowania. więc tutaj przepustowość może stać się wąskim gardłem.

za pomocą trójzębu możemy użyć polecenia powyżej na jednej maszynie. więc w tym przypadku nie ma konieczności przegrupowania. taki przypadek użycia oprócz „tylko raz”/„na wschodzie raz” może rozróżnić co do wykorzystania itp

Trident jest rodzaj grupowania logiczne grupowanie

Powiązane problemy