Apache Kafka
大規模なリアルタイムデータストリーミングのための分散メッセージングプラットフォーム
メッセージングストリーム処理
Apache Kafka とは
Apache Kafka は、LinkedIn が 2011 年に開発し Apache Software Foundation に寄贈した分散ストリーミングプラットフォームである。高スループット、低レイテンシ、耐障害性を備え、1 日に数兆メッセージを処理する大規模システムで使われている。
Kafka の基本概念
[Producer] → [Topic (Partition 0)] → [Consumer Group A]
[Topic (Partition 1)] → [Consumer Group B]
[Topic (Partition 2)]
| 概念 | 説明 |
|---|---|
| Topic | メッセージのカテゴリ (例: orders, payments) |
| Partition | Topic を分割した単位。並列処理の基盤 |
| Producer | メッセージを Topic に送信 |
| Consumer | Topic からメッセージを読み取り |
| Consumer Group | 複数の Consumer でパーティションを分担処理 |
| Broker | Kafka サーバー。クラスターを構成 |
| Offset | パーティション内のメッセージの位置 |
Kinesis との比較
| 観点 | Kafka (MSK) | Kinesis Data Streams |
|---|---|---|
| 管理 | MSK でマネージド | フルマネージド |
| スループット | パーティション数で無制限 | シャードあたり 1MB/s |
| 保持期間 | 無制限 (設定次第) | 最大 365 日 |
| Consumer | Consumer Group で柔軟 | 1 シャード 5 読み取り/s |
| エコシステム | Kafka Connect, Kafka Streams | Lambda 統合 |
| コスト | ブローカーインスタンス課金 | シャード時間課金 |
| 適用場面 | 大規模、既存 Kafka 資産 | AWS ネイティブ、小〜中規模 |
AWS に閉じたシンプルな構成なら Kinesis、大規模で Kafka エコシステムを活用するなら MSK を選択する。
MSK (Managed Streaming for Apache Kafka)
AWS MSK は Kafka のマネージドサービスで、ブローカーのプロビジョニング、パッチ適用、モニタリングを AWS が担う。MSK Serverless を使えばクラスターの容量管理も不要になる。
| タイプ | 管理負荷 | コスト |
|---|---|---|
| MSK Provisioned | 中 (ブローカー数を指定) | インスタンス時間 + ストレージ |
| MSK Serverless | 低 (自動スケール) | スループット課金 |
ユースケース
- イベントソーシング: 全イベントを Kafka に永続化し、状態を再構築
- CDC (Change Data Capture): DB の変更を Kafka 経由で下流システムに伝播 (Debezium)
- ログ集約: 複数サービスのログを Kafka に集約し、OpenSearch や S3 に転送
- リアルタイム分析: ストリーム処理エンジン (Kafka Streams, Flink) でリアルタイム集計
関連書籍も参考になる。