2017-08-03 6 views
0

はのは、私は2つのカフカのトピックログインユーザ名とパーティションの等しい数を持つことによって仕切られログアウトがあるとしましょう。 両方のトピックを消費する2人のコンシューマのコンシューマグループを実行すると、各ユーザーのログインイベントとログアウトイベントが同じコンシューマによって処理されることを確認できますか?kafkaコンシューマは複数のトピックを消費する場合、同じトピックキーを扱いますか?

答えて

0

私はデフォルト設定ではあまり考えていません...もっと良く説明してください... ログイントピックにはパーティション0と1があります(lin0、ここでは、両方のコンシューマが同じコンシューマグループに属しており、それらはc1とc2と呼ばれています。 c1でsubscribe()メソッドを使用するとlin0とlout1が得られ、c2ではlin1とlout0が得られます。 プロデューサーがユーザー名= u1(たとえば)のログインに書き込みを行うと、ユーザー名u1のログインに関連するメッセージとともにlin0に入ることがあり、このメッセージはc1によって消費されます。ログアウトすると、プロデューサはusername = u1のメッセージをlout0に書き込みます.lout0はc2によって処理されます! ログインはc1で処理されましたが、c2でログアウトしました!それはあなたがもちろん望んでいないことを望むことです! このシナリオは、自動パーティション割り当てとデフォルトパーティショナーを処理するsubscribe()メソッドが原因で発生します。これは、プロデューサーがメッセージをラウンドロビン形式でトピックパーティションに配布します。

プロデューサで使用するカスタムパーティショナーを作成する可能性があるので、ユーザー名に基づくいくつかの基準では、u1は常に両方のトピック(lin0とlout0)のパーティション0に書き込まれます。 次に、コンシューマ側でassign()を使用して、特定のパーティションを尋ねると、例えばc1はlin0とlout0からコンシューマに正確に問い合わせることができます。 もちろん、購読によって提供されるリバランス機能は失われます。

関連する問題