摄取银河系:使用Zerobus Ingest实现PB级数据处理
Databricks推出Zerobus Ingest,这是一种无服务器流式API,可以即时部署PB级数据管道,无需手动管理基础设施。通过动态分区和零拷贝协议缓冲区解码器,该系统在24小时内从NASA NEOWISE数据集成功摄取了1 PB数据,吞吐量达到12 GB/s。
Databricks正式发布了Zerobus Ingest,这是一款完全托管的无服务器流式摄取服务,旨在解决大规模时序数据的高吞吐摄取难题。该服务通过简单的推送API接受来自任意数据源的数据,并直接写入由Unity Catalog管理的Delta表中,省去了传统Kafka架构中繁琐的基础设施配置和维护工作。用户只需创建表并推送数据,即可在数秒内使数据在Lakehouse中可查询。
Zerobus Ingest的核心创新在于其动态分区设计。传统消息总线中,分区既是并行单元也是排序单元,这种耦合导致分区拓扑通常不可变,需要为峰值负载预留资源,难以缩容。Zerobus将排序保证从分区级别提升到流连接级别:每个生产者连接的数据流保证有序,而底层处理单元(Pod)可以动态增减。当某个Pod负载过高时,新的流会被路由到其他Pod,生产者无需感知,排序保证不受影响。这种设计实现了真正的弹性伸缩,使单表吞吐量可超过12 GB/s,同时保持成本高效。
在性能优化方面,Zerobus构建了自定义的零拷贝Protobuf解析器Zeroparser。标准Protobuf解析工具要么依赖编译时代码生成(速度快但无法处理动态模式),要么依赖运行时反射(灵活但性能差)。Zeroparser采用单遍解析且零内存分配,即使在动态描述符和复杂模式下也能达到每CPU核心约1 GB/s的解析吞吐量,超越了部分行业领先的代码生成方案。Zeroparser利用Rust的生命周期系统,确保协议解析时的编译时安全性,同时将原始线路字节的网络所有权保持独占,消除了不必要的数据复制。Zeroparser已作为开源SDK的一部分发布。
为了支持低延迟的消息确认,Zerobus实现了延迟优化的预写日志(WAL)。数据持久化后,服务器返回流中最高已提交偏移量,客户端据此清空本地缓冲区。这种异步确认循环结合gRPC双向流,使得客户端能够保持轻量级,同时获得与Kafka相当的低延迟和高持久性保证。
为了验证系统能力,Databricks使用了NASA的NEOWISE数据集(包含11年内2000亿个数据点),借助Locust工具模拟真实场景中的多对一数据汇聚模式。测试部署在Kubernetes上,使用2048个Locust工作节点,每个节点建立一个Zerobus流,总共2048个并发流。测试持续约25小时,结果显示Zerobus Ingest在24小时内稳定维持了12 GB/s的写入吞吐量,向单个表摄入了超过1万亿条记录。这一结果有力证明了Zerobus在真实生产环境中处理PB级数据流的能力,且无需任何手动调优或基础设施规划。