Compreender e ajustar as Unidades de StreamingUnderstand and adjust Streaming Units

As unidades de streaming (SUs) representam os recursos de computação alocados para executar um trabalho de Stream Analytics.Streaming Units (SUs) represents the computing resources that are allocated to execute a Stream Analytics job. Quanto maior o número de SUs, mais recursos de CPU e memória são alocados para o trabalho.The higher the number of SUs, the more CPU and memory resources are allocated for your job. Esta capacidade permite que você se concentre na lógica de consulta e abstrai a necessidade de gerenciar o hardware para executar o trabalho do Stream Analytics de maneira oportuna.This capacity lets you focus on the query logic and abstracts the need to manage the hardware to run your Stream Analytics job in a timely manner.

Para obter o processamento de streaming de baixa latência, os trabalhos do Azure Stream Analytics executam todo o processamento na memória.To achieve low latency stream processing, Azure Stream Analytics jobs perform all processing in memory. Quando a memória está acabando, o trabalho de streaming falha.When running out of memory, the streaming job fails. Como resultado, em um trabalho de produção, é importante monitorar o uso de recursos de um trabalho de streaming e verificar se há recursos suficientes alocados para manter os trabalhos em execução 24/7.As a result, for a production job, it’s important to monitor a streaming job’s resource usage, and make sure there is enough resource allocated to keep the jobs running 24/7.

A métrica de utilização % SU, que varia de 0% a 100%, descreve o consumo de memória da carga de trabalho.The SU % utilization metric, which ranges from 0% to 100%, describes the memory consumption of your workload. Para um trabalho de streaming com volume mínimo, a métrica costuma ficar entre 10 a 20%.For a streaming job with minimal footprint, this metric is usually between 10% to 20%. Se a subutilização de SU% for alta (acima de 80%) ou se os eventos de entrada forem registrados (mesmo com uma baixa% de utilização, já que ele não mostra o uso da CPU), a carga de trabalho provavelmente exigirá mais recursos de computação, o que exige que você aumente o número de SUs.If SU% utilization is high (above 80%), or if input events get backlogged (even with a low SU% utilization since it does not show CPU usage), your workload likely requires more compute resources, which requires you to increase the number of SUs. É melhor manter a métrica de SU abaixo de 80% para considerar picos ocasionais.It's best to keep the SU metric below 80% to account for occasional spikes. Para reagir às cargas de trabalho aumentadas e aumentar as unidades de streaming, considere definir um alerta de 80% na métrica de utilização de SU.To react to increased workloads and increase streaming units, consider setting an alert of 80% on the SU Utilization metric. Além disso, você pode usar as métricas de atraso da marca d' água e eventos de pendência para ver se há um impacto.Also, you can use watermark delay and backlogged events metrics to see if there is an impact.

Configurar as Unidades de Streaming (SU) do Stream AnalyticsConfigure Stream Analytics Streaming Units (SUs)

  1. Entre no Portal do AzureSign in to Azure portal

  2. Na lista de recursos, localize o trabalho do Stream Analytics que você deseja escalar e abra-o.In the list of resources, find the Stream Analytics job that you want to scale and then open it.

  3. Na página do trabalho, no título Configurar, selecione Escalar.In the job page, under the Configure heading, select Scale. O número padrão de SUs é 3 ao criar um trabalho.Default number of SUs is 3 when creating a job.

    Configuração de trabalho do Stream Analytics no Portal do Azure

  4. Use o controle deslizante para definir o SUs para o trabalho.Use the slider to set the SUs for the job. Observe que você está limitado a configurações específicas de SU.Notice that you are limited to specific SU settings.

  5. Você pode alterar o número de SUs atribuído ao seu trabalho, mesmo quando ele estiver em execução.You can change the number of SUs assigned to your job even when it is running. Isso não será possível se seu trabalho usar uma saída não particionada ou tiver uma consulta de várias etapas com uma partição diferente por valores.This is not possible if your job uses a non-partitioned output or has a multi-step query with different PARTITION BY values. Talvez você esteja restrito a escolher um conjunto de valores de SU quando o trabalho estiver em execução.You maybe restricted to choosing from a set of SU values when the job is running.

Monitorar o desempenho do trabalhoMonitor job performance

Usando o portal do Azure, você pode acompanhar a taxa de transferência de um trabalho:Using the Azure portal, you can track the throughput of a job:

Análise de fluxo do Azure, monitorar trabalhos

Calcule a taxa de transferência esperada da carga de trabalho.Calculate the expected throughput of the workload. Caso a taxa de transferência seja menor do que o esperado, ajuste a partição de entrada e a consulta e adicione unidades de streaming ao seu trabalho.If the throughput is less than expected, tune the input partition, tune the query, and add SUs to your job.

Quantas SUs são necessárias para um trabalho?How many SUs are required for a job?

A escolha do número de SUs necessárias para um trabalho específico depende da configuração da partição para as entradas e da consulta que é definida dentro do trabalho.Choosing the number of required SUs for a particular job depends on the partition configuration for the inputs and the query that's defined within the job. A página Escala permite que você defina o número correto de SUs.The Scale page allows you to set the right number of SUs. Trata-se de uma prática recomendada para alocar mais SUs do que o necessário.It is a best practice to allocate more SUs than needed. O mecanismo de processamento do Stream Analytics foi otimizado para latência e taxa de transferência ao custo da alocação de memória adicional.The Stream Analytics processing engine optimizes for latency and throughput at the cost of allocating additional memory.

Em geral, a prática recomendada é iniciar com 6 SUs para consultas que não usam PARTITION BY.In general, the best practice is to start with 6 SUs for queries that don't use PARTITION BY. Em seguida, determine o ponto ideal usando um método de tentativa e erro no qual você modifica o número de SUs depois de passar volumes representativos de dados, e examine a métrica % de Utilização de SU.Then determine the sweet spot by using a trial and error method in which you modify the number of SUs after you pass representative amounts of data and examine the SU% Utilization metric. O número total de unidades de streaming que pode ser usado por um trabalho do Stream Analytics depende do número de etapas na consulta definida para o trabalho e do número de partições em cada etapa.The maximum number of streaming units that can be used by a Stream Analytics job depends on the number of steps in the query defined for the job and the number of partitions in each step. Saiba mais sobre os limites aqui.You can learn more about the limits here.

Para saber mais sobre como escolher o número correto de SUs, consulte esta página: Escalar trabalhos do Azure Stream Analytics para aumentar a taxa de transferênciaFor more information about choosing the right number of SUs, see this page: Scale Azure Stream Analytics jobs to increase throughput

Observação

A escolha de quantas SUs são necessárias para um trabalho específico depende da configuração de partição das entradas e da consulta definida para o trabalho.Choosing how many SUs are required for a particular job depends on the partition configuration for the inputs and on the query defined for the job. Você pode selecionar até sua cota de SUs para um trabalho.You can select up to your quota in SUs for a job. Por padrão, cada assinatura do Azure tem uma cota de até 500 SUs para todos os trabalhos de análise em uma região específica.By default, each Azure subscription has a quota of up to 500 SUs for all the analytics jobs in a specific region. Para aumentar as SUs para suas assinaturas, entre em contato com o Suporte da Microsoft.To increase SUs for your subscriptions beyond this quota, contact Microsoft Support. Os valores válidos para o SUs por trabalho são 1, 3, 6 e em incrementos de 6.Valid values for SUs per job are 1, 3, 6, and up in increments of 6.

Fatores que aumentam a utilização de % SUFactors that increase SU% utilization

Elementos de consulta temporal (orientados ao tempo) são o conjunto principal de operadores com monitoração de estado fornecido por Stream Analytics.Temporal (time-oriented) query elements are the core set of stateful operators provided by Stream Analytics. O Stream Analytics gerencia o estado dessas operações internamente em nome de usuário, ao gerenciar o consumo de memória, pontos de verificação para a resiliência e a recuperação de estado durante as atualizações de serviço.Stream Analytics manages the state of these operations internally on user’s behalf, by managing memory consumption, checkpointing for resiliency, and state recovery during service upgrades. Embora o Stream Analytics gerencia totalmente os estados, há um número de práticas recomendadas que os usuários devem considerar.Even though Stream Analytics fully manages the states, there are a number of best practice recommendations that users should consider.

Observe que um trabalho com lógica de consulta complexa pode ter alta utilização de % de SU mesmo quando não estiver recebendo eventos de entrada continuamente.Note that a job with complex query logic could have high SU% utilization even when it is not continuously receiving input events. Isso pode acontecer após um aumento repentino nos eventos de entrada e saída.This can happen after a sudden spike in input and output events. Se a consulta for complexa, o trabalho poderá continuar a manter o estado na memória.The job might continue to maintain state in memory if the query is complex.

A utilização percentual da UA pode cair repentinamente para 0 por um curto período antes de voltar aos níveis esperados.SU% utilization may suddenly drop to 0 for a short period before coming back to expected levels. Isso ocorre devido a erros transitórios ou atualizações iniciadas pelo sistema.This happens due to transient errors or system initiated upgrades. O aumento do número de unidades de streaming para um trabalho pode não reduzir a utilização de SU% se a consulta não for totalmente paralela.Increasing number of streaming units for a job might not reduce SU% Utilization if your query is not fully parallel.

Ao comparar a utilização durante um período de tempo, use métricas de taxa de eventos.While comparing utilization over a period of time, use event rate metrics. As métricas InputEvents e OutputEvents mostram quantos eventos foram lidos e processados.InputEvents and OutputEvents metrics show how many events were read and processed. Há métricas que indicam o número de eventos de erro também, como erros de desserialização.There are metrics that indicate number of error events as well, such as deserialization errors. Quando o número de eventos por unidade de tempo aumenta, o SU% aumenta na maioria dos casos.When the number of events per time unit increases, SU% increases in most cases.

Lógica de consulta com estado em elementos temporaisStateful query logic in temporal elements

Um dos recursos exclusivos do trabalho do Azure Stream Analytics é a execução do processamento com estado, como funções de análise temporal, de junções temporais e de agregações em janela.One of the unique capability of Azure Stream Analytics job is to perform stateful processing, such as windowed aggregates, temporal joins, and temporal analytic functions. Cada um desses operadores mantém as informações de estados.Each of these operators keeps state information. O tamanho máximo da janela para esses elementos de consulta é de sete dias.The maximum window size for these query elements is seven days.

O conceito de janela temporal é exibido em vários elementos de consulta do Stream Analytics:The temporal window concept appears in several Stream Analytics query elements:

  1. Agregações em janela: GROUP BY Em cascata, Salto e Janelas deslizantesWindowed aggregates: GROUP BY of Tumbling, Hopping, and Sliding windows

  2. Junções temporais: JOIN à função DATEDIFFTemporal joins: JOIN with DATEDIFF function

  3. Funções analíticas temporais: ISFIRST, LAST e a LAG com LIMIT DURATIONTemporal analytic functions: ISFIRST, LAST, and LAG with LIMIT DURATION

Os seguintes fatores influenciam a memória usada (parte da métrica de unidades de streaming) por trabalhos do Stream Analytics:The following factors influence the memory used (part of streaming units metric) by Stream Analytics jobs:

Agregações em janelasWindowed aggregates

A memória consumida (tamanho do estado) para uma agregação em janelas nem sempre é diretamente proporcional ao tamanho da janela.The memory consumed (state size) for a windowed aggregate is not always directly proportional to the window size. Em vez disso, a memória consumida é proporcional à cardinalidade de dados ou o número de grupos em cada janela de tempo.Instead, the memory consumed is proportional to the cardinality of the data, or the number of groups in each time window.

Por exemplo, na consulta a seguir, o número associado a clusterid é a cardinalidade da consulta.For example, in the following query, the number associated with clusterid is the cardinality of the query.

SELECT count(*)
FROM input 
GROUP BY  clusterid, tumblingwindow (minutes, 5)

Para reduzir os problemas causados pela alta cardinalidade na consulta anterior, você pode enviar eventos para o Hub de eventos particionado pelo clusterid e escalar horizontalmente a consulta, permitindo que o sistema processe cada partição de entrada separadamente usando Partition by , conforme mostrado no exemplo abaixo:In order to mitigate any issues caused by high cardinality in the previous query, you can send events to Event Hub partitioned by clusterid, and scale out the query by allowing the system to process each input partition separately using PARTITION BY as shown in the example below:

SELECT count(*) 
FROM input PARTITION BY PartitionId
GROUP BY PartitionId, clusterid, tumblingwindow (minutes, 5)

Depois que a consulta é particionada horizontalmente, ela é espalhada em vários nós.Once the query is partitioned out, it is spread out over multiple nodes. Como resultado, o número de valores de clusterid em cada nó é reduzido, diminuindo assim a cardinalidade do grupo por operador.As a result, the number of clusterid values coming into each node is reduced thereby reducing the cardinality of the group by operator.

As partições do Hub de Evento devem ser particionadas pela chave de agrupamento para evitar a necessidade de uma etapa de redução.Event Hub partitions should be partitioned by the grouping key to avoid the need for a reduce step. Para obter mais informações, confira Visão Geral dos Hubs de Eventos.For more information, see Event Hubs overview.

Junções temporaisTemporal joins

A memória consumida (tamanho do estado) de uma junção temporal é proporcional ao número de eventos no espaço de manobra temporal da junção, que é a taxa de entrada do evento multiplicada pelo tamanho do espaço da ondulação.The memory consumed (state size) of a temporal join is proportional to the number of events in the temporal wiggle room of the join, which is event input rate multiplied by the wiggle room size. Em outras palavras, a memória consumida por junções é proporcional ao intervalo de tempo DateDiff multiplicado por taxa média de eventos.In other words, the memory consumed by joins is proportional to the DateDiff time range multiplied by average event rate.

O número de eventos sem correspondência na junção afeta a utilização da memória para a consulta.The number of unmatched events in the join affect the memory utilization for the query. A consulta a seguir está tentando localizar as impressões de anúncio que geram cliques:The following query is looking to find the ad impressions that generate clicks:

SELECT clicks.id
FROM clicks 
INNER JOIN impressions ON impressions.id = clicks.id AND DATEDIFF(hour, impressions, clicks) between 0 AND 10.

Neste exemplo, é possível que vários anúncios sejam exibidos e algumas pessoas cliquem neles, e é necessário manter todos os eventos em uma janela do tempo.In this example, it is possible that lots of ads are shown and few people click on it and it is required to keep all the events in the time window. A memória consumida é proporcional ao tamanho da janela e à taxa de eventos.Memory consumed is proportional to the window size and event rate.

Para corrigir isso, envie eventos para o Hub de eventos particionado pelas chaves de junção (ID nesse caso) e escale horizontalmente a consulta, permitindo que o sistema processe cada partição de entrada separadamente usando Partition, conforme mostrado:To remediate this, send events to Event Hub partitioned by the join keys (ID in this case), and scale out the query by allowing the system to process each input partition separately using PARTITION BY as shown:

SELECT clicks.id
FROM clicks PARTITION BY PartitionId
INNER JOIN impressions PARTITION BY PartitionId 
ON impression.PartitionId = clicks.PartitionId AND impressions.id = clicks.id AND DATEDIFF(hour, impressions, clicks) between 0 AND 10 

Depois que a consulta é particionada horizontalmente, ela é espalhada em vários nós.Once the query is partitioned out, it is spread out over multiple nodes. Como resultado, o número de eventos em cada nó é reduzido, diminuindo o tamanho do estado mantido na janela de junção.As a result the number of events coming into each node is reduced thereby reducing the size of the state kept in the join window.

Funções de análise temporalTemporal analytic functions

A memória consumida (tamanho do estado) de uma função de análise temporal é proporcional à taxa de eventos multiplicada pela duração.The memory consumed (state size) of a temporal analytic function is proportional to the event rate multiply by the duration. A memória consumida por funções analíticas não é proporcional ao tamanho da janela, mas em vez disso, a contagem de partição em cada janela de tempo.The memory consumed by analytic functions is not proportional to the window size, but rather partition count in each time window.

A correção é semelhante à junção temporal.The remediation is similar to temporal join. Você pode escalar horizontalmente a consulta usando PARTITION BY.You can scale out the query using PARTITION BY.

Buffer fora de ordemOut of order buffer

Usuário pode configurar o tamanho do buffer fora de ordem no painel de configuração de Ordenação de Eventos.User can configure the out of order buffer size in the Event Ordering configuration pane. O buffer é usado para armazenar as entradas durante o período e, depois, reordená-las.The buffer is used to hold inputs for the duration of the window, and reorder them. O tamanho do buffer é proporcional à taxa de entrada de evento multiplicada pelo tamanho da janela fora de ordem.The size of the buffer is proportional to the event input rate multiply by the out of order window size. O tamanho da janela padrão é 0.The default window size is 0.

Para corrigir o estouro de buffer de fora de ordem, expanda a consulta usando PARTITION BY.To remediate overflow of the out of order buffer, scale out query using PARTITION BY. Depois que a consulta é particionada horizontalmente, ela é espalhada em vários nós.Once the query is partitioned out, it is spread out over multiple nodes. Como resultado, o número de eventos em cada nó é reduzido, diminuindo o número de eventos em cada buffer de reordenação.As a result, the number of events coming into each node is reduced thereby reducing the number of events in each reorder buffer.

Contagem de partição de entradaInput partition count

Cada partição de entrada de um trabalho de entrada tem um buffer.Each input partition of a job input has a buffer. Quanto maior o número de partições de entrada, mais recursos o trabalho consumirá.The larger number of input partitions, the more resource the job consumes. Para cada unidade de streaming, o Azure Stream Analytics pode processar aproximadamente 1 MB/s de entrada.For each streaming unit, Azure Stream Analytics can process roughly 1 MB/s of input. Portanto, você pode otimizar correspondendo o número de unidades de streaming do Stream Analytics com o número de partições no seu Hub de Eventos.Therefore, you can optimize by matching the number of Stream Analytics streaming units with the number of partitions in your Event Hub.

Normalmente, um trabalho configurado com uma unidade de streaming é suficiente para um Hub de Eventos com duas partições (que é o requisito mínimo para o Hub de Eventos).Typically, a job configured with one streaming unit is sufficient for an Event Hub with two partitions (which is the minimum for Event Hub). Se o Hub de Eventos tem mais partições, seu trabalho do Stream Analytics consumirá mais recursos, mas não necessariamente usará a taxa de transferência adicional fornecida pelo Hub de Eventos.If the Event Hub has more partitions, your Stream Analytics job consumes more resources, but not necessarily uses the extra throughput provided by Event Hub.

Para um trabalho com 6 unidades de streaming, talvez seja necessário quatro ou oito partições do Hub de Eventos.For a job with 6 streaming units, you may need 4 or 8 partitions from the Event Hub. No entanto, evite muitas partições desnecessárias uma vez que provoca o uso excessivo de recursos.However, avoid too many unnecessary partitions since that causes excessive resource usage. Por exemplo, um Hub de Eventos com 16 partições ou mais em um trabalho do Stream Analytics que tem 1 unidade de streaming.For example, an Event Hub with 16 partitions or larger in a Stream Analytics job that has 1 streaming unit.

Dados de referênciaReference data

Os dados de referência no ASA são carregados na memória para uma pesquisa rápida.Reference data in ASA are loaded into memory for fast lookup. Com a implementação atual, cada operação de junção com dados de referência mantém uma cópia dos dados de referência na memória, mesmo se você ingressar com os mesmos dados de referência várias vezes.With the current implementation, each join operation with reference data keeps a copy of the reference data in memory, even if you join with the same reference data multiple times. Para consultas com PARTITION BY, cada partição tem uma cópia dos dados de referência, para que as partições fiquem completamente separadas.For queries with PARTITION BY, each partition has a copy of the reference data, so the partitions are fully decoupled. Com o efeito multiplicador, o uso da memória pode ficar muito alto rapidamente se você ingressar com dados de referência várias vezes e com várias partições.With the multiplier effect, memory usage can quickly get very high if you join with reference data multiple times with multiple partitions.

Uso de funções UDFUse of UDF functions

Quando você adiciona uma função UDF, o Azure Stream Analytics carrega o runtime do JavaScript na memória.When you add a UDF function, Azure Stream Analytics loads the JavaScript runtime into memory. Isso afetará a % de SU.This will affect the SU%.

Próximas etapasNext steps