Kafka がどのように機能するかをよりよく理解しようとしています。物事を単純にするために、現在私は 1 つの Zookeeper で 3 つのブローカーと 1 つのパーティションで 3 つの重複係数で Kafka を実行しています。
質問 1 : トピックは同じパーティション内でオフセットを共有しますか?
1 つのパーティション (例: パーティション 0) に複数のトピック (例: dogs
、 ) があります。これで、私のプロデューサーが各トピックへのメッセージを作成しました。へ、へ、へ。を指定すると返され、 と で同じことを行うと、それぞれのメッセージが返されることに気付きました。これは素晴らしい機能ですが、私の理解と矛盾しています。オフセットはパーティションに固有のものだと思いました。3 つのメッセージをパーティションに順番にプッシュしたとします。メッセージに 0、1、2 のインデックスを付けるべきではありませんか? 今では、オフセットはトピックに固有のもののようです。cats
dinosaurs
"msg: bark"
dogs
"msg: meow"
cats
"msg: rawr"
dinosaurs
dogs[0][0]
bark
cats
dinosaurs
想像したらこんな感じでした
['bark', 'meow', 'rawr']
実際には、このように見えます
['bark']
['meow']
['rawr']
しかし、それはできません。オフセットと、ログ ファイル内のメッセージの実際の物理的な場所を追跡する何かが必要です。
質問 2 : 1 つのトピックに複数のパーティションがある場合、メッセージをどのように管理しますか?
質問 1 では、1 つのパーティションに複数のトピックがあります。ここで、1 つのトピックに複数のパーティションがあるとします。たとえば、dogs
トピック用に 4 つのパーティションがあり、Kafka クラスターにプッシュするメッセージが 100 あります。パーティション 1 に 25 個、パーティション 2 に 25 個というように、メッセージをパーティション全体に均等に分散しますか?
コンシューマーが一度に 100 個のメッセージすべてを消費したい場合、4 つのパーティションすべてにアクセスする必要があります。これは、100 個のメッセージで 1 つのパーティションにヒットすることとどう違うのですか? ネットワーク帯域幅がボトルネックになっていますか?
前もって感謝します