2016-04-04 1 views
0

私のトポロジでは、メッセージを受信するためにポート5555で開いたソケットを持つスパウトがあります。どのスーパーバイザがそのスパウトを聞いていますか?

ストームクラスタにスーパーバイザが10人いる場合、それぞれの5555ポートを監視しますか?

最後に、どのスーパーバイザにメッセージを送信する必要がありますか?ここ

+1

は、プッシュの代わりにポーリングを使用するか、中間のman/lbのような他のデザインを使用する必要があるようです – Mzf

答えて

1

複数のコメント:

  • 嵐が噴出介してデータ摂取のためのプルベースのモデルを使用しています。あなたはソケットを開くと、データが使用可能になるまで、あなたはスパウトをブロックします(これは悪いです。詳細については、このSO質問を参照してください。Why should I not loop or block in Spout.nextTuple()
  • スパウト展開(監督)について:
    • まず、それが依存します監督は
    • 第三噴出/ボルト(トポロジーのためのconfigパラメータnumber_of_workersを参照)を実行するワーカーJVMを起動する:あなたの注ぎ口の並列処理は、監督者にはスパウトのコードを実行するか、
    • 秒(すなわち、parallelims_hint、デフォルト値は1ではありません) Stormは負荷分散されたラウンドロビンスケジューラを使用します。したがって、2人のSpoutエグゼキュータが同じワーカーJVM(または同じホスト上の異なるワーカー)にスケジュールされることがあります。このような場合のために、あなたは、ポートの競合を取得します(一つだけ実行するには、ポートを開くことができます)
  • 日付分布、この場合には問題ないはず:あなたは本当にプッシュして行けば、あなたはに任意のホストを選択することができますデータを送信する。ストームは気にしない。もちろん、キーベースのパーティショニングが必要な場合は、単一のパーティションから単一のSpoutインスタンスにデータを送信することができます。代わりに、Spout内のデータを転送し、消費するボルトのパーティションを取得するためにfieldsGroupingを使用してください。ただし、Spoutでプルベースのデータ取り込みを使用する場合は、各Spoutが特定のパーティションからデータを取得し、問題が自然に解決されるようにすることができます。

要約:プッシュベースのデータ取り込みを使用することは悪い考えかもしれません。

関連する問題