私は複数のスパウトの間でタスクを共有しようとしています。私は、外部ソースから一度に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 - このスパウトを実行するために割り当てられなければならないタスクの数です。各タスクは、クラスタのどこかのプロセス内のスレッド上で実行されます。
ああ...あなたは神様です。あなたは私の命を救いました。 私は5つのカフカパーティションを持っていて、setSpout()で3のparallelism_hintを設定しました。なぜparallelism_hintを5に設定した後、自分のトポロジが3つのカフカパーティションからのみ読み上げるのか不思議に思っていました。これを指摘してくれてありがとう。 – Shams