2013-05-16 12 views
5

W topologiipodczas przetwarzania strumienia chcę opóźnić przetwarzanie niektórych wiadomości do momentu uzyskania niektórych przyszłych punktów w czasie. Jakie są rozsądne opcje, aby to zrobić?Opóźnione przetwarzanie kolejki/komunikatu w czasie burzy

Dotychczas myślałem o następujące elementy:

  • Korzystanie Java Thread.sleep. (Jednakże, na podstawie kilku rozmów, nie jest to zalecany sposób, aby efektywnie wykorzystać zasoby burzy.)
  • Użyj opóźnione kolejki ...
  • Czy Storm ma jakieś API do opóźniania wiadomości, którą przeoczyłem?
  • Czy ZeroMQ udostępnia opóźniony interfejs API do przesyłania wiadomości, który Storm (jeśli zmodyfikowany) może wykorzystać?
+0

możesz dać pojęcie, dlaczego chcesz to zrobić? jeśli nie jesteście gotowi na przetwarzanie tego materiału, dlaczego na początek przekazujecie go do swojej topologii burzowej? –

+2

Moja pierwsza odpowiedź: Dlaczego pytasz dlaczego? Czy ważne jest, aby zrozumieć lub odpowiedzieć na pytanie? Istnieje wiele powodów, dla których opóźnienie (lub zmiana harmonogramu) krotki jest przydatne. Moje przetwarzanie krotek nie polega wyłącznie na czysto funkcjonalnych przekształceniach danych. W moim przypadku przetwarzanie krotki obejmuje przechwytywanie stanu czegoś poza systemem i integrację z innymi strumieniami. Ponieważ zmienia się z czasem, chcę przechwycić ten stan w kontrolowanych odstępach czasu. Jednym z takich wymogów nie jest zbyt częste zużywanie zasobów zewnętrznych. –

Odpowiedz

2

Użyj zewnętrznej kolejki komunikatów, aby zaimplementować kolejkę opóźnienia czasowego.

Od Storm jest odporny na uszkodzenia i poziomo rozmieszczone, że to ma sens, aby wybrać kolejkę komunikatów, który pasuje do tego stylu, takie jak:

  • Kafki
  • Amazon SQS
  • RabbitMQ
5

Używamy krotek tikseli topologii do przetwarzania oczekujących krotek luzem. Zasadniczo po prostu przechowuje je w pamięci na każdej zwykłej krotce, a gdy otrzymuje krotkę kleszczową, przetwarza je w pamięci/indeksowaniu za pomocą przetwarzania zbiorczego/potokowego.

Używamy również redis w przypadkach, gdy mamy ogromny skok objętości, jeśli skok woluminu wykrył wszystkie krotki przekierowujące do lokalnego magazynu redis na każdym z hostów, a następnie zostanie zepchnięty do przetwarzania topologii po zmniejszeniu objętości. Nasza sytuacja może nie pasować do twojej, tylko mojej 2c.