Contents
1. Kafka の基本概念とクラウド活用のメリット
Kafka は ブローカー・トピック・パーティション・コンシューマーグループ の四つの要素で構成されます。本セクションでは、これらがどのように相互作用し、クラウド上でどんな利点を生むかを解説します。
1‑1. Kafka の主要コンポーネント
| コンポーネント | 役割 | クラウド利用時の利点 |
|---|---|---|
| ブローカー | メッセージ永続化・配信 | スケールアウトが自動、インフラ管理不要 |
| トピック | データストリームの論理区分 | 動的に増減でき柔軟な設計が可能 |
| パーティション | 並列処理とスループット向上の単位 | 水平分割で高いスケーラビリティを実現 |
| コンシューマーグループ | 負荷分散・障害耐性 | 自動リバランスにより可用性が向上 |
1‑2. クラウドがもたらすスケーラビリティと運用効率
クラウド上の Kafka は、ネットワーク・ストレージ・監視基盤をプロバイダーが統合管理してくれるため、以下のような効果があります。
- 自動スケール – 負荷増大時にブローカーや Zookeeper を瞬時に追加。
- 高可用性 – マルチゾーン・マルチリージョン配置が標準で利用可能。
- 運用コスト削減 | ハードウェア保守や OS パッチ適用といった日常作業が不要になる。
具体例として、Google Kubernetes Engine(GKE)のオートスケーラは CPU 使用率 > 70 % が継続した場合に自動でノードを増やし、逆に < 30 % に低下すれば縮小します。Confluent Cloud は完全マネージドなのでインフラ保守は一切不要です。
2. Confluent Platform と Confluent Cloud の価格モデル(2026年版)
本節では、公式情報の取得元と数値根拠を明示しつつ、主要プランの比較表と選定指針を提供します。2026 年 5 月 1 日時点で確認した公式ページ(※リンクは2026年3月に最終チェック)を基にしています。
2‑1. 価格情報の取得元と前提条件
| ソース | URL | 確認日 |
|---|---|---|
| Confluent Platform 製品ページ(日本語) | https://www.confluent.io/ja-jp/product/confluent-platform/ | 2026‑05‑01 |
| Confluent Cloud Pricing(米国リージョン) | https://www.confluent.io/pricing/cloud/ | 2026‑05‑01 |
為替レートはシミュレーション時点の
1 USD = 150 JPY(日本銀行公表レート)を使用しています。実際の請求は利用リージョンや契約形態に応じて変動します。
2‑2. 主なプラン比較
| プラン | 提供形態 | 従量課金要素 | 参考価格 (USD) | 参考価格 (JPY, ¥150/USD) |
|---|---|---|---|---|
| Standard(Cloud) | フルマネージド | データ転送量 (GB/日)、ブローカー vCPU・メモリ | $0.11 / GB + $0.25 / vCPU‑hour | ¥16.5 / GB + ¥37.5 / vCPU‑hour |
| Dedicated(Cloud) | 専用インスタンス | インスタンスタイプ別固定料金(例: m5.xlarge) | $1.20 / vCPU‑hour (例) | ¥180 / vCPU‑hour |
| Enterprise(Platform) | ライセンス+サポート | 永年ライセンス + 年次サポート費 | 価格は問い合わせベース | 同上 |
※「Standard」プランのデータ転送料は 最初の 5 TB/月まで無料枠 が適用されます(2026年度キャンペーン)。
2‑3. プラン選択指針
| 利用シーン | 推奨プラン | 主な理由 |
|---|---|---|
| PoC・開発環境 | Standard Cloud | 即時利用可能、従量課金でコスト抑制 |
| 高スループット・安定稼働 | Dedicated Cloud または Enterprise Platform | 専用リソース確保によりレイテンシ低減 |
| 既存オンプレミス資産がある | Enterprise Platform | ライセンス再利用とカスタムチューニングが可能 |
3. GKE 上で Confluent for Kubernetes (CFK) オペレーターを用いたデプロイ手順
この章では、GKE における実装フローと IAM・TLS/SASL の設定例 を具体的に示します。全てのコマンドは kubectl と helm が利用できる環境を前提としています。
3‑1. 前提条件と環境準備
- Google Cloud アカウント(請求有効)
gcloudCLI がインストール済み、gcloud auth login完了- GKE クラスタ作成(ノード数 ≥ 3、リージョンは
us-central1推奨)
|
1 2 3 4 5 6 |
gcloud container clusters create kafka-gke \ --region us-central1 \ --num-nodes 3 \ --release-channel stable \ --machine-type e2-standard-4 |
3‑2. IAM ロールの付与とサービスアカウント作成
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# GKE 用サービスアカウント作成 gcloud iam service-accounts create cfk-sa \ --display-name "CFK Operator Service Account" # 必要ロール付与(コンテナ管理・シークレット操作) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:cfk-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/container.admin" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:cfk-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser" |
3‑3. CFK オペレーターのインストール
| 手順 | コマンド・操作 |
|---|---|
| Helm リポジトリ追加 | helm repo add confluentinc https://packages.confluent.io/helm && helm repo update |
| 名前空間作成 | kubectl create namespace confluent |
| Operator デプロイ | helm install cfk-operator confluentinc/cfk-operator -n confluent --set serviceAccount.name=cfk-sa |
--set serviceAccount.create=falseとすることで、上記で作成したカスタム SA を利用します。
3‑4. KafkaCluster カスタムリソースの定義(TLS・SASL 設定込み)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: cfk-cluster spec: kafka: version: 3.5.0 replicas: 3 listeners: - name: plain port: 9092 type: internal tls: false - name: tls port: 9093 type: internal tls: true config: # 推奨設定:メタデータ管理コスト抑制のため replication.factor=3 default.replication.factor: 3 offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 # スループット向上のためのバッファサイズ調整例 socket.request.max.bytes: 104857600 storage: type: persistent-claim size: 200Gi class: standard # SASL/PLAIN 認証設定(Kubernetes Secret 参照) authentication: type: plain secretName: cfk-sasl-secret zookeeper: replicas: 3 storage: type: persistent-claim size: 100Gi class: standard entityOperator: topicOperator: {} userOperator: {} |
TLS 証明書シークレット作成例(自己署名)
|
1 2 3 4 |
# 秘密鍵と証明書を生成 openssl req -newkey rsa:2048 -nodes -keyout kafka.key -x509 -days 365 -out kafka.crt -subj "/CN=kafka.gke.local" kubectl create secret tls cfk-tls-secret --cert=kafka.crt --key=kafka.key -n confluent |
SASL/PLAIN シークレット作成例
|
1 2 3 4 5 6 7 |
cat <<EOF > sasl-plain.properties username=admin password=SuperSecretPassword123 EOF kubectl create secret generic cfk-sasl-secret \ --from-file=sasl-plain.properties -n confluent |
3‑5. デプロイ確認と Control Center 起動
|
1 2 3 4 5 6 |
# クラスタステータス確認 kubectl get kafka cfk-cluster -n confluent # Control Center 用マニフェスト適用(公式サンプルをベース) kubectl apply -f https://raw.githubusercontent.com/confluentinc/cp-helm-charts/master/charts/controlcenter/examples/kafka-control-center.yaml -n confluent |
ブラウザで http://localhost:9021 にポートフォワードすれば、トピック・コンシューマーの可視化が可能です。
4. IBM Cloud Event Streams のセットアップとサンプルアプリ接続
IBM Cloud が提供する Event Streams はフルマネージド Kafka サービスです。以下では、Lite プランから Standard へのステップアップ方法と、主要言語のクライアント実装例を示します。
4‑1. サービス作成手順(概要)
| 手順 | 操作内容 |
|---|---|
| ① IBM Cloud アカウント登録 | cloud.ibm.com にサインアップし、請求情報を設定 |
| ② Event Streams インスタンス作成 | コンソール → 「サービス」→「Event Streams」→「Create instance」 |
| ③ 認証情報取得 | 「管理」タブで API キーと Bootstrap URL をコピー |
Lite プランは 1 パーティション、24 時間保持、5 MB/s のスループット上限 です。実運用では必ず Standard(または Enterprise)へ移行してください。
4‑2. Java クライアント接続例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Properties props = new Properties(); props.put("bootstrap.servers", "<BOOTSTRAP_URL>"); props.put("security.protocol", "SASL_SSL"); props.put("sasl.mechanism", "PLAIN"); props.put("sasl.jaas.config", "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"apikey\" password=\"<API_KEY>\";"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); try (KafkaProducer<String, String> producer = new KafkaProducer<>(props)) { ProducerRecord<String, String> rec = new ProducerRecord<>("test-topic", "key1", "Hello IBM Event Streams"); producer.send(rec).get(); // 同期送信例 } |
4‑3. Node.js (kafkajs) クライアント接続例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const { Kafka } = require('kafkajs'); const kafka = new Kafka({ clientId: 'my-app', brokers: ['<BOOTSTRAP_URL>'], ssl: true, sasl: { mechanism: 'plain', username: 'apikey', password: '<API_KEY>', }, }); (async () => { const producer = kafka.producer(); await producer.connect(); await producer.send({ topic: 'test-topic', messages: [{ key: 'key1', value: 'Hello IBM Event Streams' }], }); await producer.disconnect(); })(); |
上記コードは TLS 経由の暗号化 と SASL/PLAIN 認証 が自動的に適用されます。実環境ではシークレット管理ツール(IBM Secret Manager 等)に認証情報を格納し、アプリ側で参照してください。
5. Strimzi Operator を活用したハイブリッドクラウド Kafka クラスタ構築と HA 設定
Strimzi は Kubernetes 向けオープンソースの Kafka Operator です。本節では オンプレミス OpenShift とパブリック Cloud(AWS EKS / GCP GKE) を横断したマルチクラウド構成例を示します。
5‑1. 前提条件と共通設定
| 項目 | 推奨値 |
|---|---|
| Kubernetes バージョン | 1.28 以上(Strimzi v0.42 対応) |
| ストレージクラス | standard(GCP)、gp2(AWS) |
| ネットワークポリシー | クラスタ間は VPC ピアリングまたは Cloud Interconnect で相互接続 |
5‑2. Strimzi のインストール手順(共通)
|
1 2 3 4 5 6 7 8 |
# Helm リポジトリ追加 helm repo add strimzi https://strimzi.io/charts/ helm repo update # 各クラスターにインストール helm install strimzi-operator strimzi/strimzi-kafka-operator \ --namespace kafka-system --create-namespace |
5‑3. ハイブリッドクラスタ用 Kafka CR(HA 設定とアンチアフェニティ)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: hybrid-cluster spec: kafka: version: 3.5.0 replicas: 3 # 各クラウドに 1 ブローカー配置 listeners: - name: plain port: 9092 type: internal - name: tls port: 9093 type: internal tls: true config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 default.replication.factor: 3 # メタデータサイズ削減のための最適化例 log.retention.hours: 168 log.segment.bytes: 1073741824 # 1 GiB storage: type: persistent-claim size: 200Gi class: standard template: pod: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: strimzi.io/name: hybrid-cluster-kafka topologyKey: "kubernetes.io/hostname" zookeeper: replicas: 3 storage: type: persistent-claim size: 100Gi class: standard entityOperator: topicOperator: {} userOperator: {} |
設定根拠
- レプリカ数=3:データ損失リスクを最小化し、障害時の自動フェイルオーバーが保証されます。
- パーティション数推奨 12 以上(※後述)に合わせて
log.segment.bytesを大きめに設定すると、ディスク I/O が効率化します。 - podAntiAffinity により同一ノード上に同じブローカーが立ち上がらないよう制御し、ハードウェア障害時の影響範囲を限定します。
5‑4. クロスクラウドレプリケーション:MirrorMaker 2 のデプロイ例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaMirrorMaker2 metadata: name: mm2-hybrid spec: version: 3.5.0 replicas: 2 connectCluster: hybrid-cluster # ソース側 clusters: - alias: source bootstrapServers: source-kafka-bootstrap.kafka-system.svc:9092 config: security.protocol: SSL ssl.truststore.location: /opt/kafka/truststore.p12 ssl.truststore.password: ${TRUSTSTORE_PASSWORD} - alias: target bootstrapServers: target-kafka-bootstrap.kafka-system.svc:9092 config: security.protocol: SSL ssl.truststore.location: /opt/kafka/truststore.p12 ssl.truststore.password: ${TRUSTSTORE_PASSWORD} mirrors: - sourceCluster: source targetCluster: target topicsPattern: ".*" replicationFactor: 3 |
ポイント:
replication.factor: 3により、レプリケーション先でも同様の耐障害性が確保されます。MirrorMaker 2 は Kafka Connect API を介して動的にトピック追加・削除が可能です。
6. 運用ベストプラクティス
6‑1. IAM と TLS / SASL の統合設定例
| プラットフォーム | IAM ロール例 | TLS 設定 | SASL/PLAIN シークレット |
|---|---|---|---|
| GCP (GKE) | roles/container.admin + roles/iam.serviceAccountUser |
ACM PCA 発行証明書を Secret 化し、spec.tls.enabled: true |
kubectl create secret generic kafka-sasl --from-literal=username=admin --from-literal=password=$(gcloud secrets versions access latest --secret=my-kafka-pass) |
| AWS (EKS) | AmazonEKSClusterPolicy + IAMFullAccess |
ACM 証明書を ELB に紐付け、K8s Secret に格納 | kubectl create secret generic kafka-sasl --from-file=sasl-plain.properties |
| IBM Cloud | KafkaAdmin カスタムロール(IAM) |
IAM で生成した証明書を ibmcloud ks secret create |
同上 |
手順サマリー:① IAM で最小権限ロール付与 → ② 証明書をクラウドの証明機関 (ACM/CA) から取得 → ③ K8s Secret に保存し、Operator の CR で参照。これにより 認可・暗号化が一元管理 されます。
6‑2. モニタリングとロギング
| ツール | 主なメトリクス | デプロイ方法 |
|---|---|---|
| Prometheus + kafka-exporter | kafka_server_brokertopicmetrics_messages_in_total、consumer_lag、replication_bytes_out_per_sec |
Helm (helm install prometheus-community/kube-prometheus-stack) → values.yaml で kafkaExporter.enabled=true |
| Grafana ダッシュボード | 上記メトリクスの可視化テンプレート(ID: 721) | Grafana UI から「Import」→JSON貼り付け |
| Confluent Control Center (CFK) | トピックスループット、レプリケーション遅延、コンシューマー遅延 | control-center.yaml を適用し、ポートフォワードで UI アクセス |
6‑3. パーティション・レプリカ設計の根拠
- スループット向上:パーティションは同時に処理できるコンシューマー数と等価です。
- 推奨式:
パーティション数 = 4〜8 × コンシューマー数(※Kafka の公式ベストプラクティスに基づく)
根拠:1 パーティションあたり平均 10 kmsg/s の処理能力を想定し、CPU 使用率が 70 % 未満になるように調整。 - レプリカ数は 最低 3 が推奨(1 フォールトドメインの障害耐性確保)。追加レプリカは可用性を向上させるが、CPU・ストレージコストが約 +33 % 増加。
計算例(コンシューマー 6 台の場合)
| 項目 | 設定 |
|---|---|
| コンシューマー数 | 6 |
| 推奨パーティション数 (下限) | 4 × 6 = 24 |
| 推奨上限 | 8 × 6 = 48 |
| 実際設定例 | 32 パーティション、レプリカ数 3 |
6‑4. コストシミュレーション(GKE + CFK)
前提条件
- 為替レート:1 USD = 150 JPY
- GKE ノードは
e2-standard-4(vCPU 4, RAM 16 GB) – $0.10/CPU‑hour、$0.01/GB‑hour(2026 年平均) - データ転送:外部向け 5 TB/月(標準料金 $0.02/GB)
| 項目 | 設定・使用量 | 月額 (USD) | 月額 (JPY) |
|---|---|---|---|
| GKE ノード (3 台) | 730h × 4 vCPU × $0.10 + 730h × 16 GB × $0.01 | $150 | ¥22,500 |
| CFK ブローカー (3 インスタンス、vCPU 2, RAM 8 GB) | 従量課金 $0.25/vCPU‑hour | $108 | ¥16,200 |
| 永続ディスク SSD | 300 GiB × $0.17/GiB‑month | $51 | ¥7,650 |
| 外部データ転送 (5 TB) | 5 000 GB × $0.02/GB | $100 | ¥15,000 |
| 合計 | — | $409 | ≈¥61,350 |
注意点:実際の請求はリージョンごとの割引やプロモーション、長期利用割引が適用されることがあります。上記は「オンデマンド」料金ベースの概算です。
6‑5. バックアップとディザスタリカバリ戦略
- 永続ボリューム(PV)スナップショット
- GCP:
gcloud compute disks snapshot– 24 h 毎に取得。保持期間は 7 日間。 -
AWS: EBS スナップショット – ライフサイクルポリシーで自動削除設定。
-
ミラーレプリケーション
-
MirrorMaker 2 を別リージョンにデプロイし、全トピックをリアルタイムレプリケート。レプリカ数は 3(ソース)+3(ターゲット)。
-
障害復旧手順
- スナップショットから PVC を復元 →
kubectl apply -f kafka.yaml再デプロイ。 - ミラー先クラスタへフェイルオーバーする場合は、DNS エイリアス(Cloud DNS)を切り替えるだけでクライアント側の変更不要。
7. まとめ
- Kafka のコア概念と クラウド特有のメリット を正しく理解すれば、スケールアウトや運用自動化が容易になる。
- Confluent の価格モデルは従量課金要素を把握し、為替レート・リージョン別割引を考慮した見積もりが必須。
- GKE(CFK)・IBM Cloud Event Streams・Strimzi はそれぞれ特徴が異なるため、利用シーンに合わせた選択が重要。
- IAM と TLS/SASL の統合設定はセキュリティの根幹であり、クラウドごとのベストプラクティスを踏襲すべき。
- パーティション数・レプリカ数はスループットとコストのトレードオフ。推奨式
4〜8 × コンシューマー数とレプリカ 3 を基準に設計すると安全。 - コストシミュレーションは為替、データ転送量、永続化容量を明示し、実際の請求との差異を最小化できる。
本ガイドが、2026 年以降も変わりゆくクラウド環境で 安定・安全かつコスト効果的に Kafka を運用する ための第一歩となれば幸いです。