概要
- Cloudflare K2は、プロデューサーとコンシューマーのスケーリングやタイミングの課題を解決する 耐久性イベントストリーミングサービス
- R2オブジェクトストレージ上に構築され、 大規模データ処理・長期保存 ・スケーラビリティを実現
- サーバーレス設計 で、独立した複数のコンシューマーが自分のペースでデータ取得可能
- キューやパイプラインとの違いを明確化し、 用途別の選択指針 を提示
- 現在パブリックベータで提供中、 Workers Paidサブスクリプション 向けに利用可能
Cloudflare K2: イベントストリーミングの新基準
- 従来の RPCアーキテクチャ では、プロデューサーとコンシューマーのスケールやタイミングのズレが課題
- データ過多やサービス停止時に イベントが失われる リスク
- 複数の独立したコンシューマーでの 並行処理困難
- 解決策として、 プロデューサーとコンシューマーの間にバッファサービス を挿入
- 書き込みを吸収し、 各コンシューマーが独立した速度で取得 可能
- K2は Cloudflare Developer Platform 上で動作する 耐久性の高いイベントストリーミング基盤
- イベントを 順序付きログ として保存
- 読み出しは 分散処理・全配信 など柔軟に選択可能
- サーバーレス・大規模スケール・長期保存 対応
- コンシューマーダウン時も データ損失なし
K2のアーキテクチャと技術的特徴
- R2オブジェクトストレージ 上にパーティション化された耐久ログを実装
- 11 9sの高耐久性・ 強整合API 活用
- コンピュートとストレージの分離 で独立スケール・低コスト長期保存
- オブジェクトストレージ特有の制約 (追記不可)を克服
- エッジサービスで インメモリバッファリング
- 一定期間ごとに セグメントファイルとして一括書き込み
- 順序性とオフセット管理 はR2のアトミック操作で実現
- 課題:書き込みレイテンシ
- オブジェクトストレージへの書き込みは ローカルディスクより遅い
- 現状、99パーセンタイルで 約1秒のプロデューサーレイテンシ
K2と他の非同期サービス(Queues, Pipelines)との違い
- Queues
- 個別ジョブの非同期実行・複雑なワークフロー制御(リトライ、遅延、デッドレター等)
- メッセージ単位の制御が必要な場合に最適
- K2
- 大規模データ移動・長期保存・ファンアウト消費 に特化
- バッチ処理 による効率化(個別リトライは不可)
- 高スループット・分散読取 が必要な分析やログ用途向き
- Basin Pipelines
- サーバーレスなイベント変換・R2やカタログへの書き込み
- イベントの最終保存先がオブジェクトストレージ等の場合に推奨
- K2はカスタム処理や他宛先への転送に最適
K2の利用方法
- ストリーム作成
- cf CLI, Wrangler, ダッシュボード, APIで作成可能
- 用途やイベント種別ごとに 複数ストリーム運用 推奨
- イベント送信
- HTTP APIまたはWorkerバインディングで送信
- バイト列でデータを表現、柔軟なフォーマット利用可
- サブスクリプション作成
- HTTP APIで作成、 複数コンシューマーによる並列読取 対応
- 各サブスクリプションは 独立したワーク分割 を実現
- 消費処理
- 各コンシューマーはサブスクリプションを ポーリング
- バッチごとに5分間のリース、処理完了後にack/nack/リース延長
- pub/sub型 (全メッセージ配信)や ワーク分割型 の選択可
- API詳細は公式ドキュメント参照
料金・提供状況
- パブリックベータ中 :Workers Paidサブスクリプション対象
- 上限 :ストレージ最大10GB、ストリームあたり30MB/s書き込み
- ベータ期間中は無課金
- 今後の課金予定
- データ書き込み: $0.04/GB
- データ読み出し: $0.04/GB
- データ保持: $0.02/GB/月
- 上限引き上げ希望時はDiscordまたはフォームで要連絡
今後のロードマップ
- 高並列書き込み対応 (マルチGB/s)
- メッセージキー・キー順序保証
- プッシュ型Workerコンシューマー
- 低レイテンシExpress tier
- Apache Kafkaクライアント互換サポート
- フィードバックはCloudflare Discordまで
もし僕が真剣なCloudflareの顧客だったら、彼らのインフラのセキュリティについてかなり心配になると思う。確かにLLMはコードを書くのが早いけど、これは新しい製品をリリースするペースが異常に速くて、しかもスタッフは減ってるからね。