0

シナリオを単純にするだけです。、ローカルパーティションからコンシューマを消費する方法

消費者の数==パーティション==カフカブローカー番号

ブローカーがある同じマシン上で消費者を展開する場合、どのようにメッセージのみを局所的に消費し、各消費者を作るために多くの?その目的は、すべてのネットワークオーバーヘッドを削減することです。

各コンシューマが自分のマシンのpartition_idを知ることができると思っていますが、どうすればよいでしょうか?またはこの問題を解決するために他の方向がありますか?

ありがとうございました。

答えて

1

bin/kafka-topics.sh --zookeeper [zk address] --describe --topic [topic_name]は、どのブローカーが各パーティションのリーダーをホストしているかを示します。次に、各コンシューマに対して手動パーティション割り当てを使用して、ローカルパーティションから消費されていることを確認できます。

+0

実行時にローカルパーティションIDを取得できますか。それをハードコーディングしない方が良いでしょう。 –

+0

はい。 KafkaのMetadata APIを見てみましょう:https://kafka.apache.org/protocol#The_Messages_Metadata – vahid

0

Admin Client APIを使用することもできます。 最初に、describeTopics()メソッドを使用して、クラスタ内のトピックに関する情報を取得できます。 DescribeTopicResultから、各トピックのパーティションに関する情報とともにTopicPartitionInfoにアクセスできます。そこから、leader()を介してノードにアクセスできます。ノードにはhost()が含まれており、コンシューマが実行しているホストと同じかid()であるかを確認でき、コンシューマは同じマシン上で実行されているブローカIDに関する情報を取得する必要があります(一般に、 upfrontを定義する)。次のJavaDocでの管理クライアントAPIの詳細インフォア:パーティションのリーダーシップを変更することができ、その後、あなたは再びローカルであることを、すべての消費者のバランスを再調整する必要があるため

https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

1

おそらく価値がない努力。レプリケーションファクタを3から2に減らすだけで、同じ量のネットワーク帯域幅を節約できます。

+0

なぜ、レプリケーションファクタが消費者側のネットワーク帯域幅に影響を与えるのでしょうか? –

+0

@HongjiChenそれは消費者側には影響しませんが、それは生産者と消費者にとって同じ共有ネットワークであり、生産されていないものを消費することはできません。 –

関連する問題