O Atlas Stream Processing aloca recursos por processador de stream de acordo com os níveis. Alocação e custo fixos de recursos fornecem previsibilidade, simplificando o processo de design do sistema. Use este guia para entender quais níveis são mais apropriados para suas cargas de trabalho de processamento de fluxo ao planejar uma implantação.
Alocação de recursos
Cada camada fornece uma alocação fixa de potência de processamento, memória, largura de banda, paralelismo e - para processadores com fontes Apache Kafka - partições.
Nível | vCPU | RAM (GB) | Largura de banda (MBP) | Paralelismo máximo | Limite de partição Kafka de origem | Limite inicial de coleta da sincronização |
|---|---|---|---|---|---|---|
SP2 | 0.25 | 0.5 | 50 | 1 | 32 | 1 |
SP5 | 0.5 | 1 | 125 | 2 | 64 | 1 |
SP10 | 1 | 2 | 200 | 8 | Ilimitado | 5 |
SP30 | 2 | 8 | 750 | 16 | Ilimitado | 10 |
SP50 | 8 | 32 | 2500 | 64 | Ilimitado | 50 |
Paralelismo
O paralelismo determina quantos threads ou solicitações simultâneas um processador de stream pode usar para ler, enriquecer e gravar dados. Você configura o paralelismo em estágios individuais do pipeline, mas o Atlas Stream Processing o impõe em todo o processador como um todo em relação ao máximo para a camada do processador mostrado na tabela anterior.
Estágios que suportam paralelismo
Os seguintes estágios aceitam um valor de parallelism. Cada um tem como padrão 1.
Estágio | Efeito de valores mais altos |
|---|---|
O campo | |
Aumenta o número máximo de solicitações paralelas feitas para o destino | |
Aumenta o número de threads nos quais o Atlas Stream Processing distribui operações de gravação, o que exige que o processador de stream e o cluster em que ele grava use mais recursos computacionais. | |
Aumenta o número de threads de gravação interna que o operador de pia usa, distribuindo operações de gravação nesses threads. Para sinks que suportam o campo | |
Aumenta o número máximo de solicitações paralelas feitas para a função externa, o que exige mais recursos computacionais. |
Como funciona o paralelismo em tempo de execução
Um processador de stream move dados pela seguinte sequência:
Source -> Buffer -> Transform -> Buffer -> Sink
Para uma origem Apache Kafka, o Atlas Stream Processing inicia um thread de consumidor para cada partição de origem, para que um processador possa ler de várias partições de uma só vez. Os estágios de transformação no meio do pipeline ainda são executados em um único thread e processam os dados armazenados em buffer em lotes.
Quando um estágio com um parallelism valor maior que 1 recebe um lote, seus threads paralelos ou solicitações processam esse lote. O lote então passa para o próximo estágio.
Distribuição e ordenação de documentos
Quando o valor parallelism de um estágio é maior que 1, o Atlas Stream Processing distribui documentos entre threads da seguinte forma:
Se você não especificar
partitionBy, o Atlas Stream Processing atribuirá documentos a threads em ordem circular.Se você especificar
partitionBy, o Atlas Stream Processing enviará todos os documentos que têm o mesmo valor departitionBypara o mesmo thread, que os processará em ordem.
$merge é uma exceção: ele usa os campos em sua cláusula on como chave da partição.
Paralelismo cumulativo
Cada processador de fluxo tem um valor máximo de paralelismo cumulativo determinado por seu nível. O paralelismo cumulativo de um processador de fluxo é calculado da seguinte forma:
parallelism total - parallelized stages
Onde parallelism total é a soma de todos os valores de parallelism maiores que 1 nos estágios $source, $lookup, $merge, $emit e $externalFunction, e parallelized stages é o número desses estágios com valores de parallelism maiores que 1.
Por exemplo, se o seu estágio $source define um valor parallelism de 4, o seu estágio $lookup não define nenhum valor parallelism (portanto, o padrão é 1) e o seu estágio $merge define um parallelism valor de 2, então você tem dois parallelized stages, e o paralelismo cumulativo do seu processador de fluxo é calculado como (4 + 2) - 2.
Se um processador de fluxo exceder o paralelismo cumulativo máximo para seu nível, o Atlas Stream Processing lançará um erro e o avisará sobre o nível mínimo de processador necessário para o nível pretendido de paralelismo. Você deve dimensionar o processador para um nível superior ou reduzir os valores de paralelismo de seus estágios para resolver o erro. Para saber mais, consulte Stream Processing.
Partições de origem Kafka
Os processadores que leem do Apache Kafka também estão limitados pelo limite de partição de origem de seu nível. O nível SP2 limita um processador a 32 partições de origem e o nível SP5 limita um processador a 64. O nível SP10 e superiores não impõem limite de partição.
Um processador que excede o limite de partição de seu nível falha e você deve escalá-lo para oferecer suporte às partições adicionais. Como um tópico pode obter partições enquanto um processador é executado, escolha um nível com espaço para o crescimento da partição que você antecipa. Para saber mais sobre o comportamento de origem do Kafka, consulte Limitações de Atlas Stream Processing .
Monitorar o paralelismo configurado
Para comparar o paralelismo configurado com o paralelismo disponível para o nível do processador, use o campo stats.addedParallelism que as estatísticas do processador retornam. O Atlas Stream Processing retorna esse campo somente se pelo menos um estágio definir um valor parallelism maior que 1.
Seleção de carga de trabalho
As diferentes alocações de recursos de cada nível os tornam adequados para diferentes estágios e escalas de projeto.
Nível | Caso de uso |
|---|---|
SP2 | Desenvolvimento, Implantação de teste A opção de menor custo, capaz de suportar volumes de trabalho básicos com requisitos de recursos limitados. |
SP5 | Desenvolvimento, implantação de produção básica Uma opção de baixo custo adequada para tarefas de produção com baixa taxa de transferência, mesmo aquelas que empregam computação mais complexa. Os processadores SP5 podem suportar filtragem básicas, projeções e processamento de change stream. |
SP10 | Implantação de Produção Principal Uma linha de base para cargas de trabalho de produção. O SP10 e superior são destinados a pipelines que exigem níveis mais altos de paralelismo, particionamento ilimitado do Kafka ou operações de enriquecimento de dados, como pesquisas e junções. |
SP30 | Implantação de Produção Complexa Uma opção de alto desempenho projetada para operações com estado de uso intensivo de memória. SP30 suporta pipelines que utilizam janelas de longa duração, múltiplas pesquisas e estágios que exigem grandes buffers de RAM para enriquecimento de dados em escala. |
SP50 | Produção em escala empresarial A opção de melhor desempenho, projetada para fluxos de alta taxa de transferência e lógica de transformação extensiva. Os processadores SP50 são adequados para operações que exigem paralelismo massivo ou fluxos de trabalho de computação de uso intensivo. |
Considerações
Considere os seguintes fatores ao selecionar um nível apropriado:
Onda de inicialização
Um processador de fluxo pode exigir mais recursos durante sua execução inicial do que durante operações regulares. Por exemplo, um processador que executa um initialSync em relação a uma grande coleção do Atlas precisa suportar E/S e computação pesadas durante a sincronização.
Para suportar essa demanda elevada, selecione um nível mais alto temporariamente e reduza a escala do processador quando a sincronização estiver concluída e o processador fizer a transição para consumir apenas novos eventos de fluxo de alterações.
Lógica de Pipeline
A lógica do pipeline de agregação é o principal driver do consumo de CPU e RAM.
- Windows: janelas de longa duração consomem mais RAM para manter a bordo
- Documentos.
- Lógica Personalizada: estágios Javascript
$functionou agrupamento complexo - a lógica aumenta os requisitos computacionais de cada mensagem.
- Lógica Personalizada: estágios Javascript
- Combinação de complexidade: estágios adicionais com estado ou computacionalmente complexos
- introduzir mais variação potencial na demanda de recursos. A manutenção da capacidade excedente garante uma taxa de transferência consistente, mesmo durante picos de consumo.
Infraestrutura
Cada ponto de rede ou contato de armazenamento aumenta a sobrecarga de um processador de fluxo.
- Densidade de origem ou coletor: lendo ou gravando em paralelizado
- fontes ou coletores — como os tópicos do Apache Kafka com suas partições — aumenta os requisitos de E/S.
- Enriquecimento de Dados:
$lookupe$httpsestágios; e operações - contra coleções do Atlas para Enriquecer os dados em um fluxo exigem largura de banda da rede e pool de conexões.
- Enriquecimento de Dados:
- Coordenação: Em implantações complexas orquestrando muitas fontes
- e coletores, os processadores de fluxo podem servir como centros que roteiam o fluxo de dados entre cada um desses nós. Esses processadores se beneficiam da maior taxa de transferência dos níveis SP30 e SP50.
Por outro lado, cargas de trabalho de Stream Processing de alta taxa de transferência podem aumentar a demanda dos recursos conectados.
- Impacto no Atlas: E/S paralelizada e de alto volume de um fluxo
processador pode exceder a capacidade de leitura ou gravação dos Atlas clusters de origem ou coletor. Isso não só pode aumentar a latência do processador, mas também gargalos de outras cargas de trabalho dependentes desses clusters.
Para garantir o desempenho de todo o sistema, escale seus Atlas clusters proporcionalmente aos processadores com os quais eles interagem.
Desempenho e latência
As metas de desempenho podem exigir um processador de nível superior, mesmo quando a lógica de processamento é mínima.
- Alta taxa de transferência: os processadores de nível superior oferecem suporte melhor aos fluxos de suporte
- que produzem eventos em uma taxa alta.
SLAs de baixa latência: o alto paralelismo oferecido pelos processadores de nível superior ajuda a garantir que os eventos não se acumulem em uma fila quando a velocidade é importante. Em particular, os processadores SP50 oferecem quatro vezes os threads do que os processadores SP30.
- Enriquecimento de dados e cache: ao usar
$cachedLookuppara enriquecimento - fluxos com grandes conjuntos de dados de referência estáticos ou de mudança lenta, favorecem processadores de nível superior para fornecer a RAM necessária para o cache.
- Enriquecimento de dados e cache: ao usar
- Sinks complexos: Alguns coletores envolvem mais caros
- transformações, transações e sobrecarga de gerenciamento de arquivos. Para os processadores que interagem com esses sinks, os níveis mais altos ajudam a garantir desempenho e latência consistentes.
ESCALABILIDADE
O dimensionamento do Atlas Stream Processing é vertical. Você pode escalar um processador manualmente ou pode habilitar o auto-scaling para permitir que o Atlas Stream Processing ajuste o nível para você.
Para escalar um processador manualmente, interrompa-o, selecione um novo nível e reinicie-o. Os checkpoints do Atlas Stream Processing garantem que nenhum dado seja perdido durante a transição. Monitore o desempenho de seus processadores regularmente e ajuste seus níveis com base nos fatores descritos neste guia.
Para permitir que o Atlas Stream Processing ajuste o nível automaticamente em resposta ao uso de recursos, habilite o autoscaling vertical. Use os fatores deste guia para escolher o minTier e o maxTier que limitam o intervalo entre o qual um processador pode ser dimensionado.