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 ...
- W szczególności, spróbuj java.util.concurrent.DelayQueue.
- Czy warto wypróbować inne implementacje?
- 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ć?
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? –
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. –