2016-10-23 12 views
2

私はApache Kafkaの新機能です。私は、Apache Kafkaのトピックとパーティションの解剖、およびプロデューサがデータをパーティションにプッシュする方法を理解していません。パブリッシャーはどのようにApache Kafkaのトピックにメッセージをパブリッシュしますか?

私は2人のプロデューサーPR1、PR2と3つのブローカーB1、B2、B3があるとします。そして、P1、P2、P3の3つのブローカーに分割された1つのトピックT1。最初のプロデューサPR1はZookeeperと連携してブローカを見つけ、メッセージをプッシュします(たとえば、ログサーバーがログレコードを毎秒1レコードでプッシュ)、T1 - P1に設定し、オフセットを0に設定します。プッシュされます。それはパーティションP2またはP3にプッシュされますか?または最初のレコード自体がパラレルに3つのパーティションすべてにプッシュされます。

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

答えて

3

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

キーと

1.メッセージあなたは以下のようなキーでカフカのメッセージを作成し、それはパーティションを見つけるために、デフォルトのハッシュパーティショナを使用しています。デフォルトのパーティショナーは、メッセージキーに基づいてハッシュコードを作成し、対応するパーティションを見つけます。これは、ランダムなパーティを見つけるために、再びデフォルトのパーティショナを使用しています

キーメッセージなし

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

2.メッセージ。

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

3.パーティション番号

とのメッセージあなたはまた、手動でパーティション番号を渡すことができ、そのメッセージは、そのパーティションに行くメッセージを作成します。あなたはまた、メッセージが行かなければならないどのパーティション決定することで、スポークパーティション分割クラスを記述することができますカスタムパーティショナ

を使用して

4。

プロデューサーのAPIの詳細情報についてはthis

This記事では、カスタムパーティショナと、デフォルトのハッシュパーティを作成する方法についての詳細な情報を提供して見えます。

関連する問題