Netflix 的工程师详细介绍了一种适用于 Apache Cassandra 的动态分区拆分机制,可将超大时间序列分区的读取延迟从数秒降低到低于两位数的毫秒级别,同时减少生产集群中读取超时、CPU 占用率以及线程排队问题。该方案专为 Netflix 的时间序列抽象平台开发,能够自动将不断增长的分区拆分为更小的子分区,且无需修改应用程序、停机或进行大规模重新分区操作。
该系统解决了基于 Cassandra 的时间序列工作负载中长期存在的一大难题:持续增长的分区会导致读取延迟增加、压缩开销激增、内存占用承压和负载分布不均,从而降低性能。Netflix 表示,在部署该功能后,此前分区大小超过 500MB 就会出现服务可用性故障的业务可正常分页、查询数据,服务全程稳定不间断运行。
Cassandra 中的时间序列数据通常被组织成分区,按标识符和时间范围对事件进行分组。系统刚上线时,初始分区容量规划尚且适用,但流量模式变更、数据留存策略调整以及不均衡的数据增长,都可能导致某些分区变得比预期大得多。Netflix 指出,传统方式解决这类问题需要重新设计数据表结构、执行重分区操作或是修改业务应用,这在大规模集群环境中成本高昂且会对运营造成干扰。
为了应对这些挑战,Netflix 开发了一个自动化分区演进框架,该框架能够检测超大分区,并在超过预定义阈值后异步将其拆分。系统会维护记录分区边界与拆分历史的元数据,底层存储结构发生变更时对应用完全透明,业务程序仍可照常查询原有逻辑分区。

动态宽分区拆分异步管道(来源:Netflix 博客文章)
该架构引入了一个元数据层,用于跟踪父分区与子分区之间的关系。在读取过程中,元数据服务确定哪些子分区包含请求的数据,并据此路由查询请求。从多个分区检索到的结果会在返回给客户端之前进行合并。Netflix 指出,这种方法能够在不需要服务停机或修改应用程序接口的情况下实现数据重新分布。
运维安全性是核心的设计考量点。分布式系统中的分区拆分会带来并发写入、数据迁移以及一致性保障等难题。为降低系统复杂度与上线风险,该方案首个版本仅针对不可变分区实现拆分。数据迁移全程会保留原始分区,为数据重新分布期间出现问题时提供了回退机制。
Netflix 还引入了验证机制,确保在分区演进过程中数据的正确性。现有的验证管道用于比较从原始分区返回的结果与通过新读取路径生成的结果。工程师采用分阶段灰度上线策略,只有在确认两种方法之间的一致性达标后才逐步增加生产流量。
Netflix 称,该功能上线后,受影响分区的平均读取延迟从数秒降低到低于两位数的毫秒级,尾部延迟由数秒缩短至 200 毫秒及以下。公司还表示,Cassandra 集群的读取超时次数、CPU 利用率均有所下降,线程排队阻塞现象也大幅减少。

分阶段读取功能灰度上线与校验流程(来源:Netflix 博客文章)
Netflix 表示,后续将支持可变宽分区,并增加重试处理此前拆分失败的分区的机制。回顾本次部署过程,研发团队提到:在向生产环境引入该能力时,缩小复杂架构变更的影响范围、采用增量式校验验证的思路,被证实效果显著。
查看英文原文:https://www.infoq.com/news/2026/07/netflix-cassandra-partition/





