Netflix сократила задержки чтения Cassandra с секунд до миллисекунд динамическим дроблением партиций
Netflix использует Apache Cassandra для хранения временных рядов событий в своей платформе TimeSeries Abstraction. С ростом данных некоторые партиции становились «широкими» — чтение таких партиций занимало секунды, приводило к тайм-аутам, GC-паузам и высокой нагрузке на CPU. Простое масштабирование кластера было дорогим, поэтому инженеры пошли другим путём.
Они реализовали асинхронное динамическое репартиционирование: специальный детектор на пути чтения через подсчёт байтов и событие Kafka находит разросшиеся партиции, после чего они прозрачно разбиваются на меньшие дочерние партиции. Для маршрутизации используются Bloom-фильтры (время проверки — единицы микросекунд) и кэш метаданных wide_row. Корректность гарантируется контрольными суммами, сохранением исходных партиций, Spark-проверками Data Bridge и теневым сравнением.
Результат: чтение ускорилось с секунд до десятков миллисекунд, хвостовая задержка снизилась до ~200 мс, а партиции размером более 500 МБ остались доступными без перерывов. В статье также описан более простой метод переразбиения временных срезов (Time Slice Re-Partitioning), который помогает при равномерном распределении, но не решает проблему единичных «широких» ID — для этого и нужно динамическое дробление.