第2章 Kafka の Streams for Apache Kafka デプロイメント
Apache Kafka コンポーネントは、Streams for Apache Kafka ディストリビューションを使用して、OpenShift にデプロイするために提供されます。Kafka コンポーネントは通常、クラスターとして実行され、可用性を確保します。
Kafka コンポーネントが組み込まれた通常のデプロイメントには以下が含まれます。
- ブローカーノードの Kafka クラスター
- レプリケートされた ZooKeeper インスタンスの zookeeper クラスター
- 外部データ接続用の Kafka Connect クラスター
- セカンダリークラスターで Kafka クラスターをミラーリングする Kafka MirrorMaker クラスター
- 監視用に追加の Kafka メトリックデータを抽出する Kafka Exporter
- Kafka クラスターに対して HTTP ベースの要求を行う Kafka Bridge
- Cruise Control によるブローカーノード間のトピックパーティションの再バランス
少なくとも Kafka および ZooKeeper は必要ですが、上記のコンポーネントがすべて必須なわけではありません。MirrorMaker や Kafka Connect など、一部のコンポーネントでは Kafka なしでデプロイできます。
2.1. Kafka コンポーネントのアーキテクチャー
Kafka クラスターは、メッセージ配信を行うブローカーで設定されます。
ZooKeeper はクラスター管理に使用されます。Kafka を KRaft (Kafka Raft メタデータ) モードでデプロイすると、ブローカーとコントローラーのロールが Kafka ノード内に統合されるため、クラスターの管理が簡素化され、ZooKeeper が不要になります。Kafka ノードはブローカー、コントローラー、またはその両方のロールを引き継ぎます。ロールは、ノードプールを使用して Streams for Apache Kafka で設定されます。
他の Kafka コンポーネントはそれぞれ Kafka クラスターと対話し、特定のロールを実行します。
Kafka コンポーネントの操作
- Apache ZooKeeper
- Apache ZooKeeper は、ブローカーとコンシューマーのステータスを保存および追跡するクラスター調整サービスを提供します。ZooKeeper は、コントローラーの選出にも使用されます。ZooKeeper を使用する場合は、Kafka を実行する前に ZooKeeper クラスターを準備しておく必要があります。KRaft モードでは、コントローラーとして動作する Kafka ノードによって Kafka クラスター内で調整が管理されるため、ZooKeeper は必要ありません。
- Kafka Connect
Kafka Connect は、Connector プラグインを使用して Kafka ブローカーと他のシステムの間でデータをストリーミングする統合ツールです。Kafka Connect は、Kafka と、データベースなどの外部データソースまたはターゲットを統合するためのフレームワークを提供し、コネクターを使用してデータをインポートまたはエクスポートします。コネクターは、必要な接続設定を提供するプラグインです。
- ソース コネクターは、外部データを Kafka にプッシュします。
sink コネクターは Kafka からデータを抽出します。
外部データは適切な形式に変換されます。
データコネクションに必要なコネクタープラグインでコンテナーイメージを自動的にビルドする
build
設定で、Kafka Connect をデプロイできます。
- Kafka MirrorMaker
Kafka MirrorMaker は、データセンター内またはデータセンター全体の 2 台の Kafka クラスター間でデータをレプリケーションします。
MirrorMaker はソースの Kafka クラスターからメッセージを取得して、ターゲットの Kafka クラスターに書き込みます。
- Kafka Bridge
- Kafka Bridge には、HTTP ベースのクライアントと Kafka クラスターを統合する API が含まれています。
- Kafka Exporter
- Kafka Exporter は、Prometheus メトリック (主にオフセット、コンシューマーグループ、コンシューマーラグおよびトピックに関連するデータ) として分析用にデータを抽出します。コンシューマーラグとは、パーティションに最後に書き込まれたメッセージと、そのパーティションからコンシューマーが現在取得中のメッセージとの間の遅延を指します。