3

私はApache Kafkaの初心者です。Apache Kafka のトピックとパーティションの構造と、プロデューサーがデータをパーティションにプッシュする方法がわかりません。

シナリオを考えてみましょう。2 つのプロデューサー PR1、PR2 と 3 つのブローカー B1、B2、B3 があります。そして、P1、P2、P3 として 3 つのパーティションを持つ 1 つのトピック T1 が 3 つのブローカーに分割されます。ここで、最初のプロデューサー PR1 が Zookeeper と調整し、Broker を見つけてメッセージをプッシュします (ログ サーバーがログ データを 1 秒あたり 1 レコードでプッシュするとします)。T1 - P1 にオフセットを設定し、オフセットを 0 に設定します。押されます。パーティション P2 または P3 にプッシュしますか? または、最初のレコード自体が 3 つのパーティションすべてに並行してプッシュされます。

これで、2 番目のパブリッシャーが参加し、メッセージをパーティションにパブリッシュします。メッセージはどこにプッシュされますか? P1 にプッシュされますか? すでに PR1 がメッセージを P1 にプッシュしている場合、PR1 と PR2 の両方が同時にメッセージを P1 に連続して追加し、オフセット 0,1,2,3,4,5.... を作成しますか?

4

1 に答える 1

3

どのメッセージがどのパーティションに送られるかを決定する基準は複数あります。

1. キー付きメッセージ

以下のようなキーで Kafka メッセージを作成すると、デフォルトのハッシュ パーティショナーを使用してパーティションが検索されます。デフォルトのパーティショナーは、メッセージ キーに基づいてハッシュ コードを作成し、対応するパーティションを見つけます。

new ProducerRecord<String, String>("my-topic", "message key", "message")

2.メッセージキーのないメッセージ

デフォルトのパーティショナーを再び使用して、ランダムなパーティショナーを見つけます。

new ProducerRecord<String, String>("my-topic", "message")

3. パーティション番号付きメッセージ

メッセージを作成するときに、パーティション番号を手動で渡すこともできるため、メッセージはそのパーティションに送信されます。

4. カスタム パーティショナーの使用

メッセージを送信する必要があるパーティションを決定するために、専用の Partitioner クラスを作成することもできます。

Producer API の詳細については、こちらをご覧ください

この記事では、カスタム パーティショナーと既定のハッシュ パーティショナーを作成する方法について詳しく説明します。

于 2016-10-23T10:45:02.817 に答える