TL

Cloud Service

OCI Streaming

Oracle Cloud 上でストリーミングデータをリアルタイムに取り込み・処理・配信するフルマネージドサービス。Apache Kafka 互換 API を備え、AWS の Amazon Kinesis に相当する。

中級パフォーマンス効率信頼性コスト最適化セキュリティ
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.ログやIoTなど流れ続けるデータをリアルタイムに取り込む。
  • 2.Kafka互換のフルマネージド基盤、パーティションでスケール。
  • 3.再読み込み可で複数が並行処理。Kinesis に相当。

解決する課題

物理的な Kafka クラスタの構築・運用(ブローカー、ZooKeeper、パッチ、スケール)を抱えずに、大量のイベントをリアルタイムに扱えます。

  • 大量データをリアルタイムに取り込みたい
  • 複数の処理系で同じストリームを並行処理したい(コンシューマグループ)
  • 既存の Kafka クライアント/エコシステムをそのまま使いたい
  • ストリームを Object Storage / Autonomous Database 等へ配信したい(Service Connector Hub 経由)

主要概念と用語

  • Stream(ストリーム): メッセージを保持する論理的な単位。Kinesis のストリームに相当
  • Partition(パーティション): スループットの単位。1 パーティション = 書き込み 1 MB/s(最大1000メッセージ/秒)、読み取り 2 MB/s。Kinesis のシャードに相当
  • Stream Pool(ストリームプール): 複数ストリームをまとめる管理・分離の単位。Kafka 接続設定・暗号化キー・プライベートエンドポイントをここで設定
  • Message Key(メッセージキー): 同一キーは同一パーティションに振り分けられ、順序が保証される。Kinesis のパーティションキーに相当
  • Offset(オフセット): パーティション内でのメッセージ位置。コンシューマはオフセットを管理して読み直せる
  • 保持期間(Retention): **24時間〜168時間(7日)**で設定。期間内はメッセージを再読み込み可能
  • Streaming API / Kafka 互換 API: ネイティブの REST/SDK と、Apache Kafka プロトコル互換の 2 系統で読み書きできる

仕様・制限・クォータ

  • ストリームのスループットはパーティション数で決まる(パーティションを増やしてスケールアウト)
  • パーティションあたり書き込み 1 MB/s・1000 メッセージ/秒、読み取り 2 MB/s・5 リクエスト/秒
  • 1 メッセージの最大サイズは 1 MB
  • 保持期間は 24〜168 時間の範囲で設定(作成後の延長は不可、作成時に決定)
  • Kafka 互換 API ではコンシューマグループ・__consumer_offsets 相当のオフセットコミットに対応
  • リージョン/テナンシごとにパーティション総数などのサービス制限があり、引き上げ申請が可能

内部の仕組み

OCI Streaming は、メッセージキーのハッシュに基づいてレコードをパーティションへ分散し、各パーティション内では追記専用(append-only)ログとして順序を保って保持します。保持期間内であれば、複数のコンシューマが各自のオフセットから独立して読み直せるのが特徴です(キューのように取り出して消えるわけではない)。

  • ストリームはストリームプールに属し、プール単位で暗号化キーやエンドポイント(パブリック/プライベート)を管理
  • 内部実装は Apache Kafka をベースにしており、Kafka クライアントからブートストラップサーバーとしてストリームプールのエンドポイントを指定すれば、ネイティブの Kafka プロデューサ/コンシューマがそのまま動作
  • 他サービスへの配信は Service Connector Hub が担い、ストリームをソースに Object Storage / Functions / Notifications / Monitoring 等へ転送する
Streaming と Queue の違い

OCI Streaming=順序付き・再読み込み可能なストリーム(複数コンシューマ・高スループット)OCI Queue=取り出すと消える疎結合キュー(個別メッセージの確実な処理・可視性タイムアウト)。リアルタイム分析やイベント再処理が要件なら Streaming、ワーカー間のタスク分配なら Queue を選びます。

設計パターン / ベストプラクティス

  • 取り込み=Streaming、他サービスへの配信=Service Connector Hub、複雑なリアルタイム分析=GoldenGate Stream Analytics や OCI 上の Flink/Spark と組み合わせる
  • メッセージキー設計で偏り(ホットパーティション)を回避し、スループットを均等化する
  • スループットが足りなければパーティション数を増やす(プロデューサ/コンシューマも並列化)
  • 既存資産がある場合はKafka 互換 API を使い、アプリ改修を最小化して移行する
  • 保持期間は再処理の要件に合わせて設定(最大 7 日)。長期保管は Object Storage へ吐き出す

運用・監視

  • OCI Monitoringoci_streaming 名前空間)でメトリクスを監視: 取り込みバイト/メッセージ数、読み取りバイト数、スロットル、PutMessagesLatency など
  • スロットル(書き込み拒否)が出たらパーティション不足/ホットキーを疑い、パーティション増設やキー分散を検討
  • コンシューマの遅延はオフセットのラグ(最新オフセットと処理済みオフセットの差)で監視
  • 監査は OCI Audit に記録。ストリーム作成・削除・設定変更を追跡

コスト

OCI Streaming は従量課金で、主に「保持されるパーティション数(時間課金)」と「リクエスト数」「取り込み量」で構成されます。サーバーやブローカーの常時起動コストはありません。

コスト要素課金の考え方最適化のポイント
パーティション時間保持中のパーティション数 × 時間必要なスループット分だけ確保し過剰な並列度を避ける
リクエスト/取り込み量Put/Get リクエスト数・転送データ量メッセージをバッチ化して1リクエストあたりの効率を上げる
保持期間長い保持はストレージ消費に影響再処理に必要な範囲(最大7日)に絞る
運用コストクラスタ管理は不要(フルマネージド)Kafka 自前運用に比べ運用工数を削減

セキュリティ

  • 保存時暗号化は既定で有効。Oracle 管理キーに加え、OCI Vault のカスタマー管理キー(CMK) をストリームプールに指定可能
  • 転送時は TLS で保護。Kafka 互換 API は SASL/PLAIN over SSL(認証トークン)で接続
  • アクセス制御は IAM ポリシーでプロデューサ/コンシューマの権限を最小化(use stream-push / use stream-pull 等)
  • プライベートエンドポイントをストリームプールに構成すれば、VCN 内からインターネットを経由せずアクセス可能
アンチパターン

Kafka 接続用の Auth Token をコード/設定ファイルに直書きするのは NG。OCI Vault のシークレットに格納して実行時に取得し、IAM ポリシーで権限を最小化してください。漏洩時はトークンのローテーションだけで封じ込められます。

関連サービス・比較(AWS との対応)

観点OCI StreamingAmazon Kinesis Data Streams
位置づけOCI のフルマネージド・ストリーミングAWS のフルマネージド・ストリーミング
スループット単位パーティション(1MB/s 書込・2MB/s 読取)シャード(1MB/s 書込・2MB/s 読取)
順序保証のキーメッセージキーパーティションキー
互換 APIApache Kafka 互換 APIKPL/KCL・Kinesis API(Kafka 非互換)
他サービス配信Service Connector HubKinesis Data Firehose
保持期間24〜168 時間(最大7日)24 時間〜365 日
権限制御IAM ポリシー + Auth Token(SASL)IAM ロール/ポリシー

ハンズオン / CLI例

# 1. ストリームプールを作成(プールIDを後続で利用)
oci streaming admin stream-pool create \
  --compartment-id ocid1.compartment.oc1..xxxx \
  --name demo-pool

# 2. ストリームを作成(パーティション数1・保持24時間)
oci streaming admin stream create \
  --compartment-id ocid1.compartment.oc1..xxxx \
  --name events \
  --partitions 1 \
  --retention-in-hours 24 \
  --stream-pool-id ocid1.streampool.oc1..xxxx

# 3. メッセージを投入(value/key は base64 エンコードして渡す)
oci streaming stream message put \
  --stream-id ocid1.stream.oc1..xxxx \
  --messages '[{"key":"'$(echo -n 'user-123' | base64)'","value":"'$(echo -n '{"click":1}' | base64)'"}]'

# 4. カーソルを作成してメッセージを読み取り
CURSOR=$(oci streaming stream cursor create-cursor \
  --stream-id ocid1.stream.oc1..xxxx \
  --partition 0 --type TRIM_HORIZON \
  --query 'data.value' --raw-output)

oci streaming stream message get \
  --stream-id ocid1.stream.oc1..xxxx \
  --cursor "$CURSOR"

OCI Service

OCI Streamingを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

分析

比較で見る軸

クラウド: OCI / カテゴリ: 分析 / 難易度: intermediate

導入後に効く点

Kafka互換のフルマネージド基盤、パーティションでスケール。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
OCI
カテゴリ
分析
難易度
intermediate
関連資格
設計柱
performance / reliability / cost / security

判断チェックリスト

  • 自社の用途が「分析 / performance」に近いか確認する。
  • 強みである「ログやIoTなど流れ続けるデータをリアルタイムに取り込む。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

分析performancereliabilitycostsecurity

他クラウドの同等サービス

役割が近いサービスです。設計の置き換えや比較検討の参考に。