14

単純なトピックとパーティション トピックの違いを知りたいです。私の理解によると、負荷のバランスをとるために、トピックはパーティション化されています。各メッセージにはオフセットがあり、消費者は以前のメッセージが消費されたことを確認するために確認します。パーティションとコンシューマーの不一致は、kafka によって行われるバランス調整によって効率的に管理されます。

複数のトピックを作成する代わりにパーティションを作成すると、運用効率に影響します。

4

1 に答える 1

28

カフカのドキュメントから

ログ内のパーティションには、いくつかの目的があります。まず、単一のサーバーに収まるサイズを超えてログをスケーリングできます。個々のパーティションは、それをホストするサーバーに収まる必要がありますが、トピックには任意の量のデータを処理できるように多数のパーティションが含まれる場合があります

特定のトピックに複数のパーティションがあると、Kafka はそれを Kafka クラスター全体に分散できます。その結果、異なるパーティションからのデータを処理するための要求を、クラスター全体の複数のサーバーに分割できます。また、データの損失を最小限に抑えるために、各パーティションを複数のサーバーに複製することもできます。再びドキュメントページから

ログのパーティションは Kafka クラスター内のサーバーに分散され、各サーバーがデータを処理し、パーティションの共有を要求します。各パーティションは、フォールト トレランスのために構成可能な数のサーバーに複製されます。

したがって、単一のパーティションを持つトピックを使用すると、これらの柔軟性を使用できなくなります。また、実際の環境では、さまざまなトピックを保持してさまざまなカテゴリのメッセージを保持できることに注意してください (ただし、作成中にメッセージキーを使用して各パーティションに特定のカテゴリのメッセージを保持できる複数のパーティションを持つ単一のトピックを保持することもできます)。

パーティションの代わりに複数のトピックを作成しても、全体的なパフォーマンスに大きな影響があるとは思いません。しかし、サイトでユーザーが行ったすべてのツイートを追跡したいとします。次に、「User_tweet」という名前の 1 つのトピックを複数のパーティションで持つことができます。これにより、メッセージの生成中に Kafka が複数のパーティションにデータを分散でき、コンシューマー側で同じトピックからデータをプルするコンシューマーの 1 つのグループのみが必要になります。代わりに「User_tweet_1」、「User_tweet_2」、「User_tweet_3」を保持すると、メッセージの生成と消費の両方で複雑になるだけです。

于 2015-01-07T14:05:02.413 に答える