天の川を取り込む:Zerobus IngestによるPB級データ処理
DatabricksのZerobus Ingestは、サーバーレスのストリーミングAPIであり、手動のインフラ管理なしでPB級データパイプラインを即座にデプロイできます。動的パーティショニングとゼロコピーのプロトコルバッファデコーダにより、NASAのNEOWISEデータセットから24時間で1PBを取り込み、12 GB/sのスループットを実現しました。
Databricksは、サーバーレスのストリーミング取り込みサービス「Zerobus Ingest」を正式に発表しました。このサービスは、プッシュベースのAPIを介して任意のプロデューサーからのデータを受け入れ、Unity Catalogで管理されるDeltaテーブルに直接書き込むことができます。従来のKafkaベースのワークロードでは、インフラのプロビジョニングやパーティション管理に多大な労力が必要でしたが、Zerobus Ingestはそれらを完全に排除し、テーブルを作成してデータをプッシュするだけで、数秒でクエリ可能なレイクハウスにデータが届きます。
Zerobus Ingestの核心的な革新は、動的パーティショニングにあります。従来のメッセージバスアーキテクチャでは、パーティションが並列性と順序付けの両方の単位であり、その結合によりスケールダウンが困難でした。Zerobusでは、順序保証をパーティションレベルからストリーム接続レベルに移行しました。プロデューサーが接続を開くと、その接続の寿命中はデータの順序が保証され、処理するPodに関係なく一貫性が維持されます。内部では、ヒューリスティックなルーティングにより、負荷の高いPodには新しいストリームが割り当てられず、Podの動的な追加・削除が可能になります。これにより、真のオートスケーリングが実現し、単一テーブルに対して12 GB/s以上のスループットを効率的に達成できます。
パフォーマンス面では、ZerobusはカスタムのゼロコピーProtobufデコーダ「Zeroparser」を開発しました。標準的なProtobufデコーダは、コンパイル時のコード生成(高速だが動的スキーマ不可)か実行時リフレクション(柔軟だが低速)の選択を迫られますが、Zeroparserはシングルパースでメモリ割り当てゼロを実現し、動的記述子と複雑なスキーマでもCPUコアあたり約1 GB/sの解析スループットを達成します。Rustのライフタイムシステムを活用し、ワイヤバイトの所有権をネットワークに限定することで不要なコピーを排除しています。Zeroparserはオープンソースとして提供されています。
また、低レイテンシでのメッセージハンドオフを実現するため、レイテンシ最適化された書き込み先行ログ(WAL)を実装しています。メッセージが永続化されると、サーバーはストリーム内の最も高いコミット済みオフセットを返し、クライアントはそのオフセットまでのバッファを安全に解放できます。この非同期確認ループはgRPC双方向ストリーミング上で動作し、クライアントを軽量に保ちます。
Databricksは、このシステムの実力を証明するために、NASAのNEOWISEデータセット(11年分、2000億データポイント)を使用したベンチマークを実施しました。Locustツールを用いて現実世界のファンインパターンを模擬し、2048の並行ストリームから単一テーブルにデータを摂取しました。テストはKubernetes上で約25時間実行され、結果としてZerobus Ingestは24時間にわたり12 GB/sの持続スループットを維持し、1兆を超えるレコードを摂取しました。この結果は、手動調整やインフラ計画なしでPB級のデータストリームを処理できる能力を実証しています。