Amazon MSK で構築する Apache Kafka ストリーミング基盤 - クラスタ設計と運用

Apache Kafka のマネージドクラスタを設計し、MSK Serverless との使い分けと MSK Connect によるデータ連携パターンを紹介します。

MSK の特徴と Kinesis との使い分け

MSK は Apache Kafka のマネージドサービスで、ブローカーのプロビジョニング、パッチ適用、障害復旧を AWS が管理します。Kafka のプロトコルと完全互換のため、既存の Kafka プロデューサー、コンシューマー、Kafka Streams アプリケーション、Connect コネクタをそのまま使用できます。Kinesis Data Streams との使い分けは、既存の Kafka エコシステムとの互換性が必要な場合は MSK、AWS ネイティブな統合とシンプルさを優先する場合は Kinesis を選択します。Kinesis はシャード単位の従量課金でスモールスタートに適し、MSK はブローカーインスタンスの時間課金で大規模ストリーミングのコスト効率が高くなります。

クラスタ設計と MSK Serverless

プロビジョンドクラスタではブローカーのインスタンスタイプ (kafka.m5.large など)、ブローカー数、ストレージ容量を指定します。本番環境では最低 3 ブローカー (各 AZ に 1 台) を推奨し、レプリケーションファクター 3、min.insync.replicas 2 の設定でデータの耐久性を確保します。MSK Serverless は 2022 年に GA となったモードで、クラスタのプロビジョニングが完全に不要です。トピックの作成とデータの送受信だけに集中でき、スループットはパーティション単位で自動スケールします。トラフィックパターンが予測困難な場合や、運用チームのリソースが限られる場合に最適です。ただし、Kafka の設定パラメータのカスタマイズはプロビジョンドクラスタの方が柔軟です。

MSK Connect によるデータ連携

MSK Connect は Kafka Connect のコネクタをマネージドに実行するサービスです。 S3 Sink Connector でトピックのデータを S3 に自動的に書き出し、 RedshiftAthena で分析できます。 DynamoDB Sink Connector でリアルタイムにテーブルを更新し、 Debezium Source Connector で RDS のテーブル変更をキャプチャして Kafka トピックに流すことも可能です。コネクタのスケーリングは自動または手動で設定でき、ワーカー数を増減してスループットを調整します。コネクタプラグインは S3 にアップロードした JAR ファイルから作成するため、 Confluent Hub や OSS コミュニティのコネクタを自由に利用できます。 ストリーミングの分析手法を深く理解するには、専門書籍 (Amazon)が役立ちます。

MSK の料金

プロビジョンドクラスタの料金はブローカーインスタンスの時間課金とストレージで構成されます。kafka.m5.large は 1 時間あたり約 0.21 ドル (月額約 151 ドル) で、最小 3 ブローカー構成で月額約 453 ドルです。ストレージは 1 GB あたり月額約 0.10 ドルです。MSK Serverless はクラスタ時間 (約 0.75 ドル/時) とパーティション時間で課金され、トラフィックが断続的な環境で有利です。Kinesis Data Streams (シャード時間あたり約 0.015 ドル) と比較すると、MSK は Kafka エコシステムの互換性が必要な場合に選択し、AWS ネイティブの統合を重視する場合は Kinesis を選択します。

まとめ

MSK は Apache Kafka の運用管理を AWS に委託しつつ、Kafka エコシステムの互換性を維持するサービスです。MSK Serverless でクラスター管理を完全に不要にし、MSK Connect で Kafka Connect コネクタをマネージドに実行します。Tiered Storage でコールドデータを S3 に自動階層化し、ブローカーのストレージコストを削減します。