Apache-kafka-workflow
Apache Kafka-ワークフロー
今のところ、Kafkaのコアコンセプトについて説明しました。 次に、Kafkaのワークフローに光を当てましょう。
Kafkaは、1つ以上のパーティションに分割されたトピックのコレクションです。 Kafkaパーティションは、線形に順序付けられた一連のメッセージであり、各メッセージはインデックス(オフセットと呼ばれる)によって識別されます。 Kafkaクラスター内のすべてのデータは、分割されたパーティションの結合です。 着信メッセージはパーティションの最後に書き込まれ、メッセージはコンシューマーによって順番に読み取られます。 異なるブローカーにメッセージを複製することにより、耐久性が提供されます。
Kafkaは、pub-subとキューベースの両方のメッセージングシステムを、高速で信頼性の高い永続的なフォールトトレランスとゼロダウンタイムで提供します。 どちらの場合も、プロデューサーはトピックにメッセージを送信するだけで、コンシューマーは必要に応じて任意の種類のメッセージングシステムを選択できます。 次のセクションの手順に従って、消費者が選択したメッセージングシステムを選択する方法を理解しましょう。
Pub-Subメッセージングのワークフロー
以下は、Pub-Subメッセージングの段階的なワークフローです-
- プロデューサーは定期的にトピックにメッセージを送信します。
- Kafkaブローカーは、その特定のトピック用に構成されたパーティションにすべてのメッセージを保存します。 これにより、メッセージがパーティション間で均等に共有されます。 プロデューサーが2つのメッセージを送信し、2つのパーティションがある場合、Kafkaは1つのメッセージを最初のパーティションに保存し、2番目のメッセージを2番目のパーティションに保存します。
- 消費者は特定のトピックにサブスクライブします。
- 消費者がトピックをサブスクライブすると、Kafkaは消費者にトピックの現在のオフセットを提供し、Zookeeperアンサンブルにオフセットを保存します。
- 消費者は、新しいメッセージについて定期的に(100 Msなど)Kafkaを要求します。
- Kafkaはプロデューサーからメッセージを受信すると、これらのメッセージをコンシューマーに転送します。
- 消費者はメッセージを受信して処理します。
- メッセージが処理されると、コンシューマーはKafkaブローカーに確認を送信します。
- Kafkaは確認を受け取ると、オフセットを新しい値に変更し、Zookeeperで更新します。 Zookeeperではオフセットが維持されるため、消費者はサーバーの怒りがあっても次のメッセージを正しく読むことができます。
- このフローは、コンシューマーがリクエストを停止するまで繰り返されます。
- 消費者は、いつでもトピックの目的のオフセットに巻き戻し/スキップして、後続のすべてのメッセージを読むことができます。
キューメッセージング/コンシューマグループのワークフロー
単一のコンシューマではなくキューメッセージングシステムでは、同じ「グループID」を持つコンシューマのグループがトピックをサブスクライブします。 簡単に言えば、同じ「グループID」を持つトピックにサブスクライブしているコンシューマーは単一のグループと見なされ、メッセージはそれらの間で共有されます。 このシステムの実際のワークフローを確認しましょう。
- プロデューサーは、定期的にトピックにメッセージを送信します。
- Kafkaは、以前のシナリオと同様に、特定のトピック用に構成されたパーティションにすべてのメッセージを保存します。
- 単一のコンシューマーは特定のトピックにサブスクライブし、「
Group ID
」が「` Group-1`」である「Topic-01
」を想定しています。 - Kafkaは、新しいコンシューマが「
Group-1
」と同じ「` Group ID`」で同じトピック「Topic-01
」をサブスクライブするまで、Pub-Subメッセージングと同じ方法でコンシューマと対話します。 - 新しい消費者が到着すると、Kafkaは動作を共有モードに切り替え、2つの消費者間でデータを共有します。 この共有は、消費者の数がその特定のトピック用に構成されたパーティションの数に達するまで続きます。
- コンシューマの数がパーティションの数を超えると、既存のコンシューマのいずれかがサブスクライブを解除するまで、新しいコンシューマはそれ以上メッセージを受信しません。 このシナリオは、Kafkaの各コンシューマーに少なくとも1つのパーティションが割り当てられ、すべてのパーティションが既存のコンシューマーに割り当てられると、新しいコンシューマーが待機する必要があるために発生します。
- この機能は、「
Consumer Group
」とも呼ばれます。 同様に、Kafkaは両方のシステムの最高の機能を非常にシンプルかつ効率的な方法で提供します。
ZooKeeperの役割
Apache Kafkaの重要な依存関係は、分散構成および同期サービスであるApache Zookeeperです。 Zookeeperは、Kafkaブローカーと消費者の間の調整インターフェイスとして機能します。 Kafkaサーバーは、Zookeeperクラスターを介して情報を共有します。 Kafkaは、トピック、ブローカー、コンシューマーオフセット(キューリーダー)などに関する情報などの基本的なメタデータをZookeeperに保存します。
すべての重要な情報はZookeeperに保存され、通常はアンサンブル全体でこのデータを複製するため、Kafkaブローカー/Zookeeperの障害はKafkaクラスターの状態に影響しません。 Zookeeperが再起動すると、Kafkaは状態を復元します。 これにより、Kafkaのダウンタイムはゼロになります。 Kafkaブローカー間のリーダー選出も、リーダーが失敗した場合にZookeeperを使用して行われます。
Zookeeperの詳細については、リンクを参照してください:/zookeeper/index [zookeeper]
次の章で、Java、ZooKeeper、Kafkaをマシンにインストールする方法についてさらに説明します。