Particionando um Stream

Para aproveitar ao máximo a capacidade do serviço Streaming de operar em escala, configure o número de partições no stream.

Antes de criar um stream, considere o throughput de stream esperado, a estratégia de chave de partição e como seu stream será consumido. A maioria dos valores de configuração não pode ser alterada após a criação do stream. Por exemplo, após a criação de um stream, você não pode alterar o tempo de retenção de mensagens ou o número de partições.

Partições e Throughput

Ao criar um stream, você deve especificar quantas partições ele tem. O throughput esperado do seu aplicativo pode ajudá-lo a determinar o número de partições do seu stream.

Multiplique o tamanho médio da mensagem pelo número máximo de mensagens gravadas por segundo para estimar o throughput esperado. Como uma única partição é limitada a uma taxa de gravação de dados de 1 MB por segundo e 5 solicitações GET por segundo por grupo de consumidores, um throughput maior exige mais partições para evitar limitação. Tenha em mente limites adicionais do serviço Streaming ao tomar suas decisões de design.

Dica

Para ajudar a gerenciar picos de aplicativos, recomendamos alocar partições um pouco maiores do que seu throughput máximo.

Publicando em Partições

O conteúdo das mensagens que você pretende publicar em um stream também pode ajudá-lo a determinar quantas partições seu stream deve ter.

Uma mensagem é publicada em uma partição no stream. Se houver mais de uma partição, aquela na qual a mensagem será publicada é calculada usando a chave da mensagem.

Para obter mais informações, consulte Publicando Mensagens.

Chave para mapeamento de partição

As mensagens com a mesma chave vão para a mesma partição. As mensagens com chaves distintas podem ir para partições distintas ou para a mesma partição. Se você não especificar uma chave, o Streaming reconhecerá a chave nula e gerará uma chave aleatória em nome do usuário. Se um usuário publicar a mesma mensagem duas vezes, ela poderá ir para partições diferentes, porque uma chave completamente nova será gerada. Não espere que todas as mensagens com uma chave nula sejam enviadas para a mesma partição.

Por padrão, o serviço Streaming fornece uma distribuição uniforme e previsível de mensagens para partições de um stream. As APIs do Streaming não permitem que você especifique exatamente em qual partição os dados são publicados, porque isso pode introduzir um risco de hotspotting de uma única partição se um usuário não estiver ciente das nuances do Streaming. No entanto, se você usar Kafka APIs para interagir com o Streaming, poderá fazer o particionamento personalizado e mapear explicitamente as mensagens para partições, embora não seja recomendável.

Chaves de particionamento efetivas

Para garantir a distribuição uniforme de mensagens, você precisa de valores efetivos para as chaves de mensagem. Para criar um valor efetivo, considere a seletividade e a cardinalidade dos dados do Streaming.

Cardinalidade: Considere o número total de chaves exclusivas que podem ser geradas com base no caso de uso específico. Cardinalidade de chave mais alta geralmente significa melhor distribuição.

Seleção: Considere o número de mensagens com cada chave. Maior seletividade significa mais mensagens por chave, o que pode levar a pontos de acesso.

Sempre procure alta cardinalidade e baixa seletividade.

Ordenando

As mensagens com a mesma chave são armazenadas na ordem em que são publicadas e entregues aos consumidores na mesma ordem em que foram produzidas. Como as mensagens com a mesma chave vão para a mesma partição, essa garantia só se aplica no nível da partição.

Partições e Grupos de Consumidores

Se seu stream for consumido por um ou mais grupos de consumidores, considere isso na sua decisão sobre o número de suas partições. As leituras de partição são balanceadas entre as instâncias de um grupo de consumidores.

Os grupos de consumidores só poderão usar uma única instância de cada vez se o stream tiver apenas uma partição. Se o seu stream tiver várias partições, você poderá dimensionar o número de instâncias até o número de partições e ter uma instância no grupo lendo uma partição no stream.

Para obter mais informações, consulte Usando Grupos de Consumidores.