2013-08-16 6 views
10

私は複数のスパウトの間でタスクを共有しようとしています。私は、外部ソースから一度に1組のタプル/メッセージを取得し、スパウトの複数のインスタンスを作成したいという状況があります。主な目的は、負荷を共有してパフォーマンスの効率を向上させることです。ストーム - カフカ複数スパウト、どのように負荷を共有するには?

私は1つのSpout自体で同じことができますが、複数のスパウトに負荷を分けたいのです。私は負荷を分散させるロジックを得ることができません。特定のスパウトが終了するまで、メッセージのオフセットは分かりません(つまり、バッファサイズの設定に基づいて)。

誰でも論理/アルゴリズム上のワークアウト方法について明るい光を当ててください。

アドバンスありがとうございます。答えに応じて


更新:800 MB各パーティション上のデータとそれに洪水によってテスト
builder.setSpout("spout", new KafkaSpout(cfg), 5);


今使用し、マルチパーティションカフカ(すなわち5
後には、使用するコードです読み取りを終了するのに~22 secを要した。

は再び、= 1
すなわちbuilder.setSpout("spout", new KafkaSpout(cfg), 1);

は、今では~23 sec以上を取ったparallelism_hintとコードを使用しました!どうして?次のようにストームDocs setSpout()宣言によれば

である:

public SpoutDeclarer setSpout(java.lang.String id, 
           IRichSpout spout, 
           java.lang.Number parallelism_hint) 


parallelism_hint - このスパウトを実行するために割り当てられなければならないタスクの数です。各タスクは、クラスタのどこかのプロセス内のスレッド上で実行されます。

答えて

17

私はstorm-userでディスカッションを交わしました。このディスカッションでは、何か似たようなことが議論されています。

Relationship between Spout parallelism and number of kafka partitionsを読んでください。嵐

  1. あなたはKafkaSpoutに持つことができる最大並列度がパーティションの数であるためカフカ、注ぎ口を使用している間


    2の事は注意します。

  2. 負荷を複数のカフカトピックに分割し、ごとに別々のスパウトインスタンスを持つことができます。すなわち、 各吐き出し口は別の話題を扱っています。

ホストごとにkafkaパーティションを1に設定し、ホスト数を2とした場合、吐き出し並列度を10に設定しても、見積もられる最大値は2になりますはパーティションの数です。


どのようにカフカ - スパウトのパーティションの数を言及するには?あなたが見ることができるように

List<HostPort> hosts = new ArrayList<HostPort>(); 
hosts.add(new HostPort("localhost",9092)); 
SpoutConfig objConfig=new SpoutConfig(new KafkaConfig.StaticHosts(hosts, 4), "spoutCaliber", "/kafkastorm", "discovery"); 

は、ここでのブローカーはhosts.addを使用して追加することができ、partion番号がnew KafkaConfig.StaticHosts(hosts, 4)コードスニペットでとして指定されています。カフカ、注ぎ口の並列ヒントを言及する方法


builder.setSpout("spout", spout,4); 

setSpout方法を使用して、トポロジにあなたの口を添加しながら、あなたは同じことを挙げることができます。ここで は、並列性のヒントです。

Understanding-the-parallelism-of-a-Storm-topology

what-is-the-task-in-twitter-storm-parallelism


免責を助けるかもしれない


その他のリンク: !!私は嵐とjavaの両方に新しい!だからpls 編集/追加必要な場合は、どこに。

+3

ああ...あなたは神様です。あなたは私の命を救いました。 私は5つのカフカパーティションを持っていて、setSpout()で3のparallelism_hintを設定しました。なぜparallelism_hintを5に設定した後、自分のトポロジが3つのカフカパーティションからのみ読み上げるのか不思議に思っていました。これを指摘してくれてありがとう。 – Shams

関連する問題