2013-05-16 3 views
5

Storm 토폴로지에서 스트림을 처리하는 동안 향후 일정 시점까지 일부 메시지의 처리를 지연하고 싶습니다. 이 작업을 수행하기위한 합리적인 옵션은 무엇입니까?Storm에서 지연된 대기열/메시지 처리

는 지금까지, 나는 다음에 대해 생각 :

  • 자바의 Thread.sleep 사용. (단, 일부 논의에 기반이 효율적 스톰의 자원을 활용하기 위해 권장되는 방법이 아닙니다.)
  • 이 지연 큐를 사용 ...
  • 스톰에 간과 한 메시지를 지연시키는 API가 있습니까?
  • ZeroMQ는 Storm (수정 된 경우)이 이용할 수있는 지연된 메시징 API를 제공합니까?
+0

왜 이렇게하고 싶은지 몇 가지 아이디어를 줄 수 있습니까? 이 물건을 처리 할 준비가되지 않았다면 왜 폭풍 토폴로지로 넘어가서 시작합니까? –

+2

첫 응답 : 왜 묻는거야? 질문을 이해하거나 대답하는 것이 중요합니까? 튜플을 지연 (또는 재조정)하는 것이 유용한 이유는 많이 있습니다. 내 튜플 처리는 데이터의 순수한 기능 변환에 관한 것이 아닙니다. 필자의 경우 튜플을 처리하는 것은 시스템 외부의 상태를 캡처하고 다른 스트림과 통합하는 작업을 포함합니다. 시간이 지남에 따라 변하기 때문에 나는 통제 된 간격으로 그 상태를 포착하고 싶다. 이러한 요구 사항 중 하나는 외부 리소스를 너무 자주 사용하지 않는 것입니다. –

답변

2

외부 메시지 큐를 사용하여 시간 지연 큐를 구현하십시오.

폭풍 내결함성과 수평이 같은, 그 스타일에 맞는 메시지 큐 선택하는 감각을 만들 것 배포 버젼 :

  • 카프카
  • 아마존 SQS
  • RabbitMQ
5

대기중인 튜플을 대량으로 처리하기 위해 토폴로지 틱 튜플을 사용하고 있습니다. 기본적으로 모든 일반 튜플에서 메모리에 저장하며 틱 튜플을 받으면 대량/파이프 라인 처리를 사용하여 저장소/인덱싱으로 처리합니다.

또한 볼륨 스파이크가 발생하여 볼륨 수가 급격히 증가한 경우 모든 튜플이 각 호스트의 로컬 redis 스토리지로 리디렉션 된 것을 감지하고 볼륨이 다운 된 후 토폴로지 처리로 다시 푸시되는 경우 redis를 사용합니다. 우리의 상황은 당신에게 해당되지 않을 수도 있습니다. 단지 제 2c입니다.

관련 문제