技術共有

Kafka の基本フレームワーク図の推論

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. シングルポイントモデル

1. 名詞の概念

  1. ブローカ : Kafka クラスター内のノードを指します。 Kafka クラスターは、連携してメッセージの保存、送信、消費を処理する複数のブローカーで構成されます。 ブローカーは 1 つ以上のパーティションを管理します。

  2. トピック : プロデューサは指定されたトピックにメッセージを送信し、コンシューマはトピックをサブスクライブしてメッセージを取得します。 トピック自体は単なる論理グループであり、物理ストレージの概念はありません。

  3. パーティション : これは、Topic のサブセットであり、Kafka で実際にメッセージを保存および処理するための基本単位です。各トピックは複数のパーティションに分割でき、各パーティションは順序付けられた不変のメッセージ シーケンスです。

  4. レプリカ: パーティションには複数のコピーを含めることができます。

  5. リーダーブローカー: パーティションの複数のコピーの下で、そのパーティションに対するすべての読み取りおよび書き込みリクエストの処理を担当するブローカー。

  6. フォロワーブローカー: パーティションの複数のコピーの下では、リーダーのデータの同期を担当するブローカーがパーティション内に配置されます。

ここに画像の説明を挿入します

プロデューサはメッセージ (レコード) を Kafka に送信し、コンシューマはオフセット (配列の添え字に似たオフセット) を通じてデータを取得します。

同時に、各パーティションには独自のログ ファイルが存在します。Kafka はログ ファイルを使用してデータをディスクに保存します。

2. 分散クラスターの水平拡張

1. トピックの複数のパーティション

ここに画像の説明を挿入します

制作について

プロデューサーは、Bootstrap Broker を通じて Kafka クラスターに接続します。このステップでは、初期接続を確立し、クラスターのメタデータを取得します。

プロデューサがこのメタデータを取得すると、各パーティションのリーダー ブローカーが誰であるかがわかるため、正しいリーダー ブローカーにメッセージを直接送信できます。

プロデューサーはメッセージを送信するときにトピックを指定する必要がありますが、パーティショニングはオプションです。

  • パーティションが指定されていません : プロデューサが手動でパーティションを指定しない場合、Kafka はデフォルトのパーティション化戦略に従ってメッセージをパーティションに配布します。デフォルトのパーティショニング戦略は次のとおりです。
    • メッセージにキーがある場合、Kafka はキーのハッシュ値に基づいてパーティションを決定します。同じキーは常に同じパーティションに割り当てられます。
    • メッセージにキーがない場合、Kafka はポーリングまたはパーティションへのメッセージのランダム分散を使用して、メッセージが均等に分散されるようにします。
  • パーティションの指定 : プロデューサーは、メッセージを送信するときにパーティションを明示的に指定することもできます。このようにして、メッセージは指定されたパーティションに直接送信されます。

Kafka では、プロデューサーがブローカーにメッセージを送信するとき、ブローカーの最初の操作は、メッセージの永続性と信頼性を確保するためにメッセージをディスクに記録することです。

消費について

Kafka のコンシューマは通常、コンシューマ グループに属します。各コンシューマ グループには一意のグループ ID があります。コンシューマ グループの概念は、メッセージの負荷分散と並列消費を実現するために使用されます。

複数のコンシューマが同じグループに属している場合、Kafka はグループ内のコンシューマにトピック パーティションを割り当てます。各パーティションは、グループ内の 1 人のコンシューマーのみが使用できます。、負荷分散を実現できます。

  • 1 人のコンシューマがトピックにサブスクライブします

    • 1 つのコンシューマのみがトピックにサブスクライブする場合、コンシューマはトピック内のすべてのメッセージを受信します。
  • 複数のコンシューマが同じグループに属している

    • トピック内のパーティションは、グループ内のコンシューマ間で分散されます。各パーティションは、グループ内の 1 つのコンシューマーによってのみ使用されます。
    • コンシューマの数がパーティションの数を超える場合、超過したコンシューマはどのパーティションにも割り当てられず、アイドル状態のままになります。これらのコンシューマは、他のコンシューマが終了したときに自動的にパーティションを引き継ぐことができるため、高可用性が実現されます。
    • コンシューマの数がパーティションの数より少ない場合、一部のコンシューマには複数のパーティションが割り当てられます。
  • 複数の消費者が異なるグループに属している

    • 各グループは、トピック内のすべてのメッセージを個別に消費します。つまり、メッセージはグループ内のすべてのコンシューマにブロードキャストされます。

新しいパーティションの追加について

Kafka はクラスター内に新しいパーティションを作成します。これらの新しいパーティションは、バランスの取れたストレージとデータの高可用性を実現するために、さまざまなブローカーに割り当てられます。 Kafka は、既存のパーティションから新しいパーティションにデータを自動的に再分散したりバランスをとったりしません。新しいパーティションは作成された時点から空であり、後続のプロデューサーがメッセージを送信するときにのみデータがこれらの新しいパーティションに書き込まれます。コンシューマ グループはパーティション数の変化を感知し、リバランスをトリガーします。

2. パーティションの複数のコピー

ここに画像の説明を挿入します

Kafka では、各パーティションに複数のレプリカ (レプリカ) を持たせることができ、それらは異なるブローカーに保存されます。 1 つのレプリカはリーダーと呼ばれ、すべての読み取りおよび書き込みリクエストの処理を担当します。他のレプリカはフォロワーであり、リーダーのデータの同期を担当します。

複数のコピーのうち、同時に読み書きできるのは 1 つのコピーだけです。これがリーダー コピーであり、他のコピーはフォロワー コピーとなり、バックアップとして使用されます。