📊 Google Cloud Pub/Sub vs Apache Kafka 徹底比較

🏗️ アーキテクチャの違い

Google Cloud Pub/Sub

Publisher
Topic
Subscription
Subscriber
Topic A
Sub 1 (Push)
HTTP Endpoint
Sub 2 (Pull)
App
Sub 3 (Pull)
Service
特徴:
  • 完全マネージド型サービス
  • 1つのTopicに複数のSubscription
  • Push/Pull両方のモデルをサポート
  • 自動スケーリング

Apache Kafka

Producer
Topic
Consumer
Topic A (3 Partitions)
P0
📝📝📝
P1
📝📝📝
P2
📝📝📝
Consumer Group A
Consumer 1
Consumer Group B
Consumer 2
特徴:
  • 分散ストリーミングプラットフォーム
  • パーティションによる並列処理
  • Consumer Groupによるスケーラビリティ
  • メッセージの永続化と再読み込み

📋 主要な違い一覧

項目 Google Cloud Pub/Sub Apache Kafka
管理方式 フルマネージド(サーバーレス) セルフマネージド(インフラ管理が必要)
配信モデル Push/Pull両方 Pullのみ
メッセージ保持 最大7日間(デフォルト7日) 設定次第で無制限(ディスク容量まで)
順序保証 Ordering Keyを使用(同じKey内でのみ) パーティション単位で保証
スケーラビリティ 自動スケーリング 手動でパーティション追加・クラスタ拡張
料金モデル 従量課金(データ量・リクエスト数) インフラコスト(サーバー・ストレージ)
レイテンシ やや高め(数百ms) 低い(数ms〜数十ms)
再配信 Seekを使用して特定時点に戻れる Offsetで任意の位置から読み取り可能
エコシステム GCP統合(Dataflow、BigQueryなど) 豊富な外部ツール(Kafka Connect、KSQL)
運用負荷 低い(GCPが管理) 高い(Zookeeper、ブローカーの管理)

🔄 データフローの比較

Pub/Sub のメッセージフロー

1. Publisher が Topic に公開
メッセージはGoogleのインフラに保存
2. Subscription が受信
各Subscriptionは独立して全メッセージを取得
3. Subscriber が処理
Push: Pub/SubがHTTP POSTで配信
Pull: アプリが能動的に取得
💡 ポイント: 1つのTopicから複数のSubscriberが独立してメッセージを受信可能

Kafka のメッセージフロー

1. Producer が Topic に送信
Keyに基づいて特定パーティションに保存
2. パーティションに分散保存
順序保証はパーティション内でのみ
3. Consumer が読み取り
Offsetを管理して自分のペースで処理
Consumer Groupで負荷分散
💡 ポイント: パーティションによる並列処理と、Offsetによる柔軟な読み取り制御

✅ 使い分けのガイドライン

Pub/Sub を選ぶべき場合

👍 メリット

  • 運用負荷を最小化したい
  • GCPエコシステムとの統合
  • 自動スケーリングが必要
  • Push配信を活用したい
  • グローバル展開が容易

👎 制約

  • レイテンシがやや高い
  • メッセージ保持期間が最大7日
  • ベンダーロックインのリスク
  • 高トラフィックでコストが高くなる可能性
📌 適したユースケース:
  • イベント駆動型マイクロサービス
  • 非同期ワークフロー
  • IoTデータの収集
  • 通知システム
  • ログ収集とストリーミング

Kafka を選ぶべき場合

👍 メリット

  • 超低レイテンシが必要
  • 大量データの高速処理
  • メッセージの長期保持
  • 複雑なストリーム処理(Kafka Streams)
  • ベンダーニュートラル

👎 制約

  • 運用負荷が高い
  • インフラ管理が必要
  • 学習曲線が急
  • スケーリングに手動介入が必要
📌 適したユースケース:
  • リアルタイム分析
  • イベントソーシング
  • ログ集約とモニタリング
  • CDC(Change Data Capture)
  • ストリーム処理パイプライン

💰 コスト比較の考え方

Pub/Sub のコスト構造

  • メッセージ量に応じた課金
    • 最初の10GB: 無料
    • 以降: データ量で課金
  • 予測しやすいコスト
  • 運用コストがゼロ
  • 少量なら低コスト、大量だと高額に

Kafka のコスト構造

  • 固定的なインフラコスト
    • サーバー(EC2など)
    • ストレージ
    • ネットワーク
  • 運用人件費が必要
  • スケールメリットあり
  • 大量処理で割安になる傾向
💡 目安: 月間データ量が数TB以上ならKafkaが割安、それ以下ならPub/Subが総合的に安価になることが多い

🎯 まとめ

Google Cloud Pub/Sub

シンプルで運用が楽なメッセージング

GCPを使っていて、運用負荷を減らしたい場合や、中小規模のメッセージングには最適。Push配信やGCPサービスとの統合が強み。

Apache Kafka

高性能で柔軟なストリーミング

大規模データ処理やリアルタイム分析、複雑なストリーム処理が必要な場合に最適。運用負荷は高いが、パフォーマンスと柔軟性は抜群。