---
title: "Netflix reduz latência de leitura no Cassandra de segundos para milissegundos com partição dinâmica"
author: "Lígia Lemos Maia"
date: "2026-07-11 08:00:00-03"
category: "Tecnologia & Desenvolvimento"
url: "http://desbugados.scale.press/portal/desbugados/post/2026/07/11/netflix-reduz-latencia-de-leitura-no-cassandra-de-segundos-para-milissegundos-com-particao-dinamica/md"
---

## Resumo
- Netflix reduziu latência de leitura no Cassandra de segundos para milissegundos baixos com particionamento dinâmico.
- A técnica divide automaticamente partições oversized em child partitions sem downtime ou mudanças na aplicação.
- O pipeline usa detecção via Kafka, planejamento com checkpointing e validação por checksums.
- Filtros Bloom e camada de metadados garantem roteamento transparente de leituras.
- A solução opera em produção com partições acima de 500 MB mantendo serviços ativos.
- Trabalho futuro inclui suporte a partições wide mutáveis.

---

A Netflix enfrentou um desafio clássico em bancos de dados distribuídos quando partições amplas no Apache Cassandra começaram a gerar latências de leitura medidas em segundos inteiros. Para manter a fluidez de seus serviços de streaming em escala global, a empresa desenvolveu um mecanismo de particionamento dinâmico que divide automaticamente essas partições oversized em unidades menores chamadas child partitions. O resultado prático foi uma redução drástica da latência para valores de dois dígitos em milissegundos, além da diminuição de timeouts e do consumo de CPU nos clusters de produção.

## O Bug das Partições Largas em Workloads de Séries Temporais

Em sistemas que armazenam eventos temporais imutáveis, como os gerados pela plataforma TimeSeries Abstraction da Netflix, o acúmulo de dados em uma única partição identificada por TimeSeries ID pode ultrapassar facilmente 500 MB. Quando isso acontece, as operações de leitura precisam percorrer quantidades excessivas de dados, elevando a latência para segundos e sobrecarregando os recursos do cluster. A empresa optou por uma abordagem que detecta automaticamente essas partições oversized durante as leituras e inicia o processo de divisão sem interromper os serviços em execução.

O pipeline de detecção emite um evento no Kafka sempre que o tamanho de uma partição excede um limiar pré-definido para um determinado TimeSeries ID, time_slice, time_bucket ou event_bucket. Essa detecção é seguida por uma verificação de imutabilidade que garante que a partição não receberá mais escritas antes da divisão. O processo de planejamento e splitting lê a partição completa com checkpointing na tabela de metadados wide_row e aplica a estratégia EventBucketPartitionSplitStrategy, limitando o número de event buckets em partições ultra-largas para controlar a amplificação de dados.

## Como a Divisão Dinâmica Funciona na Prática

Após a divisão, uma camada de metadados registra o relacionamento entre a partição pai e as child partitions. Nas leituras subsequentes, o sistema roteia automaticamente as consultas para as partições filhas e mescla os resultados de forma transparente para a aplicação. Os engenheiros carregam as chaves divididas em filtros Bloom para acelerar o roteamento e validam a integridade com checksums pré e pós-divisão, além de verificações de consistência entre os caminhos de leitura antigo e novo. Serviços que gerenciam partições maiores que 500 MB continuam paginando e consultando dados sem interrupção durante todo o processo.

A implementação inicial concentrou-se em partições imutáveis, com rollout em fases e validação rigorosa. Um worker separado chamado Time Slice Re-Partitioning ajusta fatias futuras com base em histogramas de tamanho, embora essa abordagem isolada não fosse suficiente para tratar outliers por TimeSeries ID. O trabalho futuro prevê suporte a partições wide mutáveis, ampliando o alcance da técnica para cenários com atualizações frequentes.

## Conexão com a Modelagem de Dados na Netflix

Essa otimização se conecta diretamente com as discussões sobre como estruturar grandes volumes de dados em plataformas de streaming. [A análise de modelagem de bancos de dados da Netflix](https://desbugados.com.br/post/2024/03/04/como-a-netflix-organiza-seus-dados-analise-de-modelagem-de-bancos-de-dados-com-leo-andrade) já destacava a importância de relacionamentos e históricos de visualização para oferecer experiências personalizadas. O particionamento dinâmico complementa essa visão ao resolver gargalos de performance que surgem quando o volume de eventos temporais cresce além do planejado inicialmente.

## Caixa de Ferramentas: O Que Aprender com a Experiência da Netflix

Monitore continuamente o tamanho das partições em seus clusters Cassandra e defina alertas baseados em limiares de bytes por TimeSeries ID. Implemente uma camada de metadados para rastrear relacionamentos entre partições originais e divididas, garantindo que leituras sejam roteadas de forma transparente. Valide sempre as divisões com checksums e verificações de consistência antes de ativar o novo caminho de leitura em produção. Considere estratégias que limitem o número de buckets em partições muito largas para evitar amplificação excessiva de dados. Comece por partições imutáveis em rollouts faseados antes de estender para workloads mutáveis.