Amazon MSK

Apache Kafka のクラスター構築 / 運用を AWS がフルマネージドで提供するストリーミングサービスで、Kafka 互換の API をそのまま利用できる

概要

Amazon MSK (Managed Streaming for Apache Kafka) は、Apache Kafka のブローカークラスターを AWS 上でフルマネージドに運用できるストリーミングサービスです。Kafka のオープンソース API と互換であるため、既存の Kafka プロデューサー / コンシューマーアプリケーションをコード変更なしで移行できます。MSK Serverless を選択すればブローカーのプロビジョニングやスケーリングが自動化され、MSK Connect を使えば Kafka Connect のコネクタをマネージドに実行してデータベースや S3 との連携を簡素化できます。

ブローカー設計とパーティション戦略の勘所

MSK のプロビジョニング型クラスターには Standard ブローカーと Express ブローカーの 2 種類があり、Standard ブローカーではインスタンスタイプ / 台数 / ストレージサイズを自分で決めます。Express ブローカーではデータ用のストレージを用意 / 管理する必要がないと開発者ガイドに記載されています。ブローカーはアベイラビリティゾーン (AZ) ごとの台数で指定し、最小は AZ あたり 1 台と開発者ガイドに記載されています。パーティション数はスループットの並列度を決める主要なパラメーターで、コンシューマーグループ内の最大並列数と一致させるのが原則です。パーティション数は後から増やせますが減らすことはできないため、初期設計では将来のトラフィック増加を見越して余裕を持たせつつ、過剰に設定しすぎないバランスが求められます。Standard ブローカー向けのベストプラクティスの頁は、3 AZ のクラスター、3 以上のレプリケーションファクター (RF)、RF から 1 を引いた値以下の min.insync.replicas (minISR) を勧めており、minISR を 2 にすると 3 重に複製したトピックはレプリカが 1 つオフラインでも利用できると記載しています。Standard ブローカーのストレージには EBS が使われ、ブローカーあたりの上限はクォータの頁で 16,384 GiB です。AWS は開発者ガイドで、メタデータの管理に ZooKeeper の代わりに KRaft を使うモードに対応し、既存の ZooKeeper のクラスターは Kafka 3.9.x から KRaft へその場で移行する手順があり、サポート終了日を過ぎた Kafka のバージョンのクラスターは推奨のバージョンへ自動で更新されると案内しています (2026 年 10 月時点)。

MSK Serverless と MSK Connect による運用負荷の削減

ブローカーのキャパシティプランニングやスケーリングの手間を省きたい場合は MSK Serverless が選択肢になります。MSK Serverless はトピックへの書き込み / 読み取りスループットに応じて自動的にスケールし、ブローカーのインスタンスタイプやストレージ容量を意識する必要がありません。ただし、Kafka のすべての設定パラメーターを自由にチューニングできるわけではなく、パーティション数の上限やコンシューマーグループ数に上限があり、値はクォータの頁に記載されています。MSK Connect は Kafka Connect のコネクタをマネージド環境で実行するサービスで、Debezium による CDC (Change Data Capture) や S3 Sink Connector によるデータレイクへの書き出しを、コネクタをカスタムプラグインとして登録して構築します。Azure では Azure Event Hubs が Kafka プロトコル互換のエンドポイントを提供していますが、Event Hubs は独自のパーティション管理モデルを持つため、Kafka のレプリケーションファクターやコンシューマーグループのリバランス挙動が異なる点に注意が必要です。

Kinesis Data Streams との選定基準

AWS でリアルタイムストリーミングを構築する際、MSK と Kinesis Data Streams のどちらを選ぶかは頻出の設計判断です。Kinesis は AWS ネイティブのサービスで、Lambda や Firehose と統合されています。一方 MSK は Kafka エコシステムの豊富なコネクタやストリーム処理フレームワーク (Kafka Streams、ksqlDB) をそのまま活用でき、既存の Kafka 資産を持つチームにとっては学習コストが低くなります。判断の軸は大きく 3 つあります。第一に、既存の Kafka クライアントやコネクタ資産がある場合、MSK ではアプリケーションのコードの変更が不要と開発者ガイドに記載されています。第二に、Lambda は Kinesis と MSK の両方をイベントソースとして扱い、サーバーレスの形は Kinesis のオンデマンドモードと MSK Serverless の両方にあります。第三に、保持期間は、Kinesis Data Streams の既定が 24 時間で上限が 365 日であるのに対し、MSK はストレージの範囲で保持期間を設定でき、階層型ストレージを使うとストレージの容量は事実上無制限になると開発者ガイドに記載されています (2026 年 10 月時点)。料金の体系は両者で異なり、それぞれの料金ページに記載されています。

参考資料 (AWS 公式)

本ページの一次情報は AWS 公式サイトと公式ドキュメントです。最新の仕様と料金は次の公式ページで確認できます。

本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。

共有する