概要
Cloudflareは10月1日、R2オブジェクトストレージ上に構築したサーバーレスのイベントストリーミングサービス「K2」をパブリックベータとして発表した。K2はプロデューサーとコンシューマーを分離し、順序付けされた耐久性の高いログをスケーラブルに提供する「durable event streaming primitive」として設計されている。Cloudflareのエッジインフラは335都市以上に分散しており、Apache Kafkaのような従来の分散システムソフトウェアをその上で運用するのは困難だったことが、K2開発の背景にある。インフラ管理の必要なく、エッジネイティブにイベントストリームを扱えることが最大の特徴だ。
アーキテクチャの技術的詳細
K2はR2上に「partitioned, durable log」を実装している点が設計の核心だ。レプリケーションと合意形成をストレージ層であるR2に委譲することで、アプリケーション層のロジックを大幅に簡素化し、膨大なデータ量にも対応できる構造にしている。書き込みはまずエッジサービスのメモリ内に蓄積され、短期間のバッチ待機を経てセグメントファイルとしてR2に書き出される。この際R2の原子操作を利用することで、順序付けと厳密なオフセット管理を実現しており、99パーセンタイルでのプロデューサレイテンシは約1秒とされている。利用にはcfコマンド、Wrangler、ダッシュボード、またはAPIでストリームを作成し、HTTPまたはWorkerバインディング経由でプロデュースする。コンシューマー側は複数のサブスクリプションによる並列読み取りをサポートする。
ベータの提供範囲と料金
現時点のベータはWorkers Paid購読者を対象とし、最大10GBのストレージ、ストリームあたり30 MB/sのプロデュースレートという制限が設けられている。ベータ終了後の想定料金は、プロデュースとコンシュームのデータがそれぞれ$0.04/GB、保持データが$0.02/GB/月とされている。Cloudflareは既存のQueues(タスク追跡向け)やBasin Pipelines(オブジェクトストレージ書き込み向け)との役割の違いも明示しており、K2は大規模なデータ移動、長期保持、複数コンシューマーへのファンアウト配信といった用途に最適化されたサービスと位置づけている。
今後の展望
Cloudflareは今後、マルチGB/s規模のスループット対応、メッセージキーのサポート、Push型のWorkerコンシューマー、低レイテンシ版の提供、そしてApache Kafkaクライアントとの互換性確保を計画していると明らかにしている。Kafkaクライアント互換性が実現すれば、既存のKafkaエコシステムを持つ企業がインフラ運用の負担を負わずにエッジ分散型のストリーミング基盤へ移行しやすくなる可能性があり、Kafka運用コストに悩む開発者にとって注目すべき動きとなりそうだ。