2015-01-13 7 views
24

なぜコンシューマがzookeeperに接続してパーティションの場所を取得するのですか?また、カフカのプロデューサは、メタデータを取得するためにブローカの1つに接続する必要があります。Kafkaのコンシューマはなぜ動物園に接続し、プロデューサはブローカからメタデータを取得するのですか?

私の主張は、プロデューサにメッセージを送信するために必要なすべてのメタデータをすべてのブローカがすでに持っている場合、動物園の使用とまったく同じですか?ブローカーがこの情報を消費者に送ることはできませんでしたか?

ブローカーがメタデータを持っている理由を理解することができます。新しいメッセージが送信されるたびに飼い猫に接続する必要はありません。 zookeeperには、私が行方不明になっている機能がありますか?私はカフカクラスター内で飼い猫が本当に必要な理由を考えるのは難しいと思っています。

答えて

38

まず、高水準の消費者のためだけに飼い猫が必要です。 SimpleConsumerは、飼い猫の作業が必要ありません。

高水準の消費者にとって飼い主の主な理由は、消費されたオフセットを追跡し、ロードバランシングを処理することです。

詳細はこちら。

オフセットトラッキングについては、コンシューマを開始し、100個のメッセージを消費し、コンシューマをシャットダウンします。次に消費者を始めるときには、最後に消費されたオフセット(100)から再開したいと思うでしょう。つまり、消費された最大オフセットをどこかに保存する必要があります。 zookeeperが立ち往生する場所は次のとおりです。グループ/トピック/パーティションごとにオフセットを保存します。このようにして次回に消費者を始めると、「ねえ飼い主よ、私は消費し始めなければならないオフセットは何ですか?」と聞くかもしれません。カフカは、実際には(今だけzookeeperkafkaストレージが利用可能であり、私はkafkaストレージが完全に実装されているか分からないオフセットのため)だけでなく飼育係ではなく、他のストレージだけでなく、オフセットを格納することができることに向かって動いています。

ロードバランシングに関しては、生成されるメッセージの量が1台のマシンで処理するにはかなり大きくなり、ある時点でコンピューティングパワーを追加することをお勧めします。 100個のパーティションを持つトピックがあり、10台のマシンを持つこの量のメッセージを処理することができます。実際にここで発生するいくつかの質問があります:

  • これらの10台のマシンはどのようにしてパーティションを分割しますか?
  • マシンの1つが死んだ場合はどうなりますか?
  • あなたが別のマシンを追加したい場合はどうなりますか?

また、ここでは、グループ内のすべてのコンシューマを追跡し、各上位コンシューマがこのグループの変更を購読しています。要点は、コンシューマが表示されたり消えたりすると、Zookeeperはすべてのコンシューマに通知し、リバランスをトリガーするため、パーティションをほぼ均等に分割する(負荷を分散するなど)。このようにして、消費者のうちの1人が他人を死ぬと、この消費者が所有するパーティションを処理し続けるかどうかが保証されます。

+2

答えてくれてありがとう、これはそれをクリアし、それは私が推測するものだが、私はどこにでもそれを見つけることができませんでした。また、私はちょうど0.9消費者はもはや飼育係を使用しませんそのバージョンを読んで、それが唯一のリーダー選挙などのためのブローカーで使用されています – Luckl507

7

kafka 0.9+では、新しいコンシューマーAPIが導入されました。新しい消費者は、kafka自身によってグループバランシングが提供されるため、Zookeeperに接続する必要はありません。

関連する問題