2013-05-16 11 views
5

私のStormトポロジでは、ストリームの処理中に、将来のある時点までいくつかのメッセージの処理を遅らせたいと考えています。これを行うための合理的なオプションは何ですか?Stormの遅延キュー/メッセージ処理

これまでのところ、私は次のことについて考えています

  • JavaのThread.sleepを使用しました。 (ただし、いくつかの議論を踏まえ、これは効率的に嵐のリソースを利用するための推奨方法ではありません。)
  • が遅れたキューを使用して...
  • 私は見落としたメッセージを遅らせるためにいくつかのAPIを持っていますか?
  • ZeroMQはStorm(変更された場合)が利用できる遅延メッセージングAPIを提供しますか?
+0

あなたはこれをやりたい理由をいくつか考えていただけますか?あなたがこのようなものを処理する準備ができていないなら、なぜそれをあなたの嵐のトポロジに渡して始めますか? –

+2

私の最初の応答:なぜなぜ尋ねるのですか?質問を理解したり答えたりすることは重要ですか?タプルの遅延(または再スケジューリング)が便利な理由はたくさんあります。私のタプル処理は、純粋にデータの機能的な変換に関するものではありません。私の場合、タプルを処理するには、システム外の状態をキャプチャし、他のストリームと統合する必要があります。時間の経過とともに変化するので、私は制御された間隔でその状態を捕捉したい。そのような要件の1つは、外部リソースをあまりにも頻繁に消費することではありません。 –

答えて

2

外部メッセージキューを使用して、時間遅延キューを実装します。

嵐がフォールトトレラントで、水平に分布するので、それはそのスタイルに合ったメッセージキューを選ぶために理にかなって、例えば:

  • カフカ
  • アマゾンSQS
  • RabbitMQの
5

私たちはトポロジのティックルタプルを使用して、保留中のタプルをバルクで処理しています。基本的には、すべての通常のタプルでメモリに格納し、目盛タプルを受け取ると、バルク/パイプライン処理を使ってストレージ/インデックスに処理します。

ボリュームスパイクは、ボリュームスパイクがすべてのホストでローカルのredisストレージにリダイレクトされたことを検出し、ボリュームがダウンした後でトポロジ処理にプッシュバックされた場合に、ボリュームが急激に増加する場合にも使用します。私の状況はあなたのものには当てはまらないかもしれません。

関連する問題