そのため、エグゼキューターが kafka トピックからデータを消費する方法を指定する必要があります。
2 つのトピックがあるとします。それぞれ 2 つのパーティションを持つ t0 と t1、および 2 つのエグゼキューター e0 と e1 (両方とも同じノードに存在できるため、割り当て戦略は機能しません。マルチエグゼキューター ノードの場合はラウンド ロビンに基づいて動作するため)スケジューリング、最初に利用可能なエグゼキュータがトピックパーティションを消費するものは何でも)
私がやりたいことは、e0 が t0 と t1 の両方からパーティション 0 を消費し、e1 が t0 と t1 からパーティション 1 を消費するようにすることです。スケジューリングをいじる以外に方法はありませんか? もしそうなら、最善のアプローチは何ですか。
これを行う理由は、エグゼキューターが cassandra データベースに書き込み、並列化されたコンテキストになるため、1 つのエグゼキューターが別のエグゼキューターと「衝突」する可能性があるため、パーティションを割り当てることにより、エグゼキューターに強制的に処理させたいと考えているためです。データを順次。
Spark 2.x は、assign
オプションを使用したパーティションの割り当てをサポートしています。詳細については、こちらを参照してください。
例:
Dataset<Row> ds2 = spark
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "t0,t1")
.option("assign", '{"t0": [0], "t1": [0]}')
.load()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加