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 のプロビジョニング型クラスターでは、ブローカーのインスタンスタイプ・台数・ストレージサイズを自分で決定する必要があります。ブローカー台数はアベイラビリティゾーン (AZ) の数の倍数にするのが基本で、3 AZ 構成なら 3、6、9 台といった配置が推奨されます。パーティション数はスループットの並列度を決定する最も重要なパラメータで、コンシューマーグループ内の最大並列数と一致させるのが原則です。パーティション数は後から増やせますが減らすことはできないため、初期設計では将来のトラフィック増加を見越して余裕を持たせつつ、過剰に設定しすぎないバランスが求められます。レプリケーションファクターはデフォルトの 3 を維持し、min.insync.replicas を 2 に設定することで、1 台のブローカー障害時にもデータロスなく書き込みを継続できます。ストレージは EBS の gp3 ボリュームが使われ、ブローカーあたり最大 16 TiB まで拡張可能です。
MSK Serverless と MSK Connect による運用負荷の削減
ブローカーのキャパシティプランニングやスケーリングの手間を省きたい場合は MSK Serverless が有力な選択肢です。MSK Serverless はトピックへの書き込み・読み取りスループットに応じて自動的にスケールし、ブローカーのインスタンスタイプやストレージ容量を意識する必要がありません。ただし、Kafka のすべての設定パラメータを自由にチューニングできるわけではなく、パーティション数の上限やコンシューマーグループ数に制約があるため、大規模なストリーミング基盤ではプロビジョニング型の方が柔軟です。MSK Connect は Kafka Connect のコネクタをマネージド環境で実行するサービスで、Debezium による CDC (Change Data Capture) や S3 Sink Connector によるデータレイクへの書き出しを、コネクタの JAR ファイルをアップロードするだけで構築できます。Azure では Azure Event Hubs が Kafka プロトコル互換のエンドポイントを提供していますが、Event Hubs は独自のパーティション管理モデルを持つため、Kafka のレプリケーションファクターやコンシューマーグループのリバランス挙動が異なる点に注意が必要です。Apache Kafka の関連書籍 (Amazon) では、パーティション設計やコネクタ運用の実践的なノウハウが詳しく解説されています。
Kinesis Data Streams との選定基準
AWS でリアルタイムストリーミングを構築する際、MSK と Kinesis Data Streams のどちらを選ぶかは頻出の設計判断です。Kinesis は AWS ネイティブのサービスで、Lambda や Firehose との統合がシームレスであり、シャード単位の従量課金でスモールスタートしやすい利点があります。一方 MSK は Kafka エコシステムの豊富なコネクタやストリーム処理フレームワーク (Kafka Streams、ksqlDB) をそのまま活用でき、既存の Kafka 資産を持つチームにとっては学習コストが低くなります。判断の軸は大きく 3 つあります。第一に、既存の Kafka クライアントやコネクタ資産があるなら MSK が移行コストを最小化できます。第二に、Lambda との直接統合やサーバーレスアーキテクチャを重視するなら Kinesis の方が親和性が高いです。第三に、メッセージの保持期間が重要な場合、Kinesis はデフォルト 24 時間 (最大 365 日) であるのに対し、MSK はストレージ容量の許す限り無期限に保持できるため、イベントソーシングパターンでは MSK が有利です。コスト面では、低スループットなら Kinesis のオンデマンドモードが安価ですが、高スループットになると MSK のブローカー固定費の方がギガバイトあたりの単価で有利になる傾向があります。