Paralelização de consulta de alavancagem em Azure Stream AnalyticsLeverage query parallelization in Azure Stream Analytics

Este artigo mostra-lhe como aproveitar a paralelização no Azure Stream Analytics.This article shows you how to take advantage of parallelization in Azure Stream Analytics. Aprende-se a escalar os trabalhos do Stream Analytics configurando divisórias de entrada e ajustando a definição de consulta analítica.You learn how to scale Stream Analytics jobs by configuring input partitions and tuning the analytics query definition. Como pré-requisito, pode querer estar familiarizado com a noção de Unidade de Streaming descrita em Compreender e ajustar Unidades de Streaming.As a prerequisite, you may want to be familiar with the notion of Streaming Unit described in Understand and adjust Streaming Units.

Quais são as partes de um trabalho de Stream Analytics?What are the parts of a Stream Analytics job?

Uma definição de trabalho stream Analytics inclui pelo menos uma entrada de streaming, uma consulta e uma saída.A Stream Analytics job definition includes at least one streaming input, a query, and output. As entradas são de onde o trabalho lê o fluxo de dados.Inputs are where the job reads the data stream from. A consulta é usada para transformar o fluxo de entrada de dados, e a saída é para onde o trabalho envia os resultados do trabalho.The query is used to transform the data input stream, and the output is where the job sends the job results to.

Divisórias em entradas e saídasPartitions in inputs and outputs

A partilha permite dividir os dados em subconjuntos com base numa chave de partição.Partitioning lets you divide data into subsets based on a partition key. Se a sua entrada (por exemplo, Centros de Eventos) for dividida por uma chave, é altamente recomendado especificar esta chave de partição ao adicionar a entrada ao seu trabalho stream Analytics.If your input (for example Event Hubs) is partitioned by a key, it is highly recommended to specify this partition key when adding input to your Stream Analytics job. Escalar um trabalho stream Analytics tira partido das divisórias na entrada e na saída.Scaling a Stream Analytics job takes advantage of partitions in the input and output. Um trabalho stream Analytics pode consumir e escrever diferentes divisórias em paralelo, o que aumenta a produção.A Stream Analytics job can consume and write different partitions in parallel, which increases throughput.

EntradasInputs

Toda a entrada Azure Stream Analytics pode tirar partido da partição:All Azure Stream Analytics input can take advantage of partitioning:

  • EventHub (necessidade de definir a chave de partição explicitamente com palavra-chave PARTITION BY se utilizar o nível de compatibilidade 1.1 ou inferior)EventHub (need to set the partition key explicitly with PARTITION BY keyword if using compatibility level 1.1 or below)
  • IoT Hub (necessidade de definir explicitamente a chave de partição com palavra-chave PARTITION BY se utilizar o nível de compatibilidade 1.1 ou inferior)IoT Hub (need to set the partition key explicitly with PARTITION BY keyword if using compatibility level 1.1 or below)
  • Armazenamento de blobsBlob storage

SaídasOutputs

Quando trabalha com o Stream Analytics, pode aproveitar a partilha nas saídas:When you work with Stream Analytics, you can take advantage of partitioning in the outputs:

  • Azure Data Lake StorageAzure Data Lake Storage
  • Funções do AzureAzure Functions
  • Tabela do AzureAzure Table
  • Armazenamento de bolhas (pode definir a chave de partição explicitamente)Blob storage (can set the partition key explicitly)
  • Cosmos DB (necessidade de definir explicitamente a chave de partição)Cosmos DB (need to set the partition key explicitly)
  • Centros de Eventos (necessidade de definir explicitamente a chave de partição)Event Hubs (need to set the partition key explicitly)
  • IoT Hub (necessidade de definir explicitamente a chave de partição)IoT Hub (need to set the partition key explicitly)
  • Service BusService Bus
  • SQL e Azure Synapse Analytics com partição opcional: ver mais informações sobre a página de Base de Dados Azure SQL.SQL and Azure Synapse Analytics with optional partitioning: see more information on the Output to Azure SQL Database page.

O Power BI não suporta a divisão.Power BI doesn't support partitioning. No entanto, ainda pode dividir a entrada como descrito nesta secçãoHowever you can still partition the input as described in this section

Para obter mais informações sobre divisórias, consulte os seguintes artigos:For more information about partitions, see the following articles:

Trabalhos embaraçosos paralelosEmbarrassingly parallel jobs

Um trabalho embaraçoso paralelo é o cenário mais escalável em Azure Stream Analytics.An embarrassingly parallel job is the most scalable scenario in Azure Stream Analytics. Liga uma partição da entrada a uma instância da consulta a uma divisória da saída.It connects one partition of the input to one instance of the query to one partition of the output. Este paralelismo tem os seguintes requisitos:This parallelism has the following requirements:

  1. Se a sua lógica de consulta depende da mesma chave ser processada pela mesma instância de consulta, deve certificar-se de que os eventos vão para a mesma divisão da sua entrada.If your query logic depends on the same key being processed by the same query instance, you must make sure that the events go to the same partition of your input. Para Os Centros de Eventos ou IoT Hub, isto significa que os dados do evento devem ter o conjunto de valor PartitionKey.For Event Hubs or IoT Hub, this means that the event data must have the PartitionKey value set. Em alternativa, pode utilizar remetentes de divisórias.Alternatively, you can use partitioned senders. Para o armazenamento de bolhas, isto significa que os eventos são enviados para a mesma pasta de partição.For blob storage, this means that the events are sent to the same partition folder. Um exemplo seria uma instância de consulta que agrega dados por userID onde o hub do evento de entrada é dividido usando o userID como chave de partição.An example would be a query instance that aggregates data per userID where input event hub is partitioned using userID as partition key. No entanto, se a sua lógica de consulta não necessitar da mesma chave para ser processada pela mesma instância de consulta, pode ignorar este requisito.However, if your query logic does not require the same key to be processed by the same query instance, you can ignore this requirement. Um exemplo desta lógica seria uma consulta simples de filtro de projeto selecionado.An example of this logic would be a simple select-project-filter query.

  2. O próximo passo é fazer a sua consulta ser dividida.The next step is to make your query is partitioned. Para trabalhos com compatibilidade nível 1.2 ou superior (recomendado), a coluna personalizada pode ser especificada como Chave de Partição nas definições de entrada e o trabalho será paralellado automaticamente.For jobs with compatibility level 1.2 or higher (recommended), custom column can be specified as Partition Key in the input settings and the job will be paralellized automatically. Trabalhos com compatibilidade nível 1.0 ou 1.1, requer que você use partition BY PartitionId em todos os passos da sua consulta.Jobs with compatibility level 1.0 or 1.1, requires you to use PARTITION BY PartitionId in all the steps of your query. Vários passos são permitidos, mas todos devem ser divididos pela mesma chave.Multiple steps are allowed, but they all must be partitioned by the same key.

  3. A maioria das saídas suportadas no Stream Analytics podem tirar partido da partição.Most of the outputs supported in Stream Analytics can take advantage of partitioning. Se usar um tipo de saída que não apoie a partilha do seu trabalho não será embaraçoso.If you use an output type that doesn't support partitioning your job won't be embarrassingly parallel. Para as saídas do Event Hub, certifique-se de que a coluna-chave de partição está definida para a mesma tecla de partição utilizada na consulta.For Event Hub outputs, ensure Partition key column is set to the same partition key used in the query. Consulte a secção de saída para mais detalhes.Refer to the output section for more details.

  4. O número de divisórias de entrada deve ser igual ao número de divisórias de saída.The number of input partitions must equal the number of output partitions. A saída de armazenamento de bolhas pode suportar divisórias e herdar o esquema de partição da consulta a montante.Blob storage output can support partitions and inherits the partitioning scheme of the upstream query. Quando uma chave de partição para armazenamento blob é especificada, os dados são divididos por partição de entrada, pelo que o resultado ainda é totalmente paralelo.When a partition key for Blob storage is specified, data is partitioned per input partition thus the result is still fully parallel. Aqui estão exemplos de valores de partição que permitem um trabalho totalmente paralelo:Here are examples of partition values that allow a fully parallel job:

    • 8 divisórias de entrada de hub de evento e 8 divisórias de saída de hub de evento8 event hub input partitions and 8 event hub output partitions
    • 8 divisórias de entrada de hub de evento e saída de armazenamento de bolhas8 event hub input partitions and blob storage output
    • 8 divisórias de entrada de hub de evento e saída de armazenamento de bolhas divididas por um campo personalizado com cardinalidade arbitrária8 event hub input partitions and blob storage output partitioned by a custom field with arbitrary cardinality
    • 8 divisórias de entrada de armazenamento de bolhas e saída de armazenamento de bolhas8 blob storage input partitions and blob storage output
    • 8 divisórias de entrada de armazenamento de bolhas e 8 divisórias de saída de centro de evento8 blob storage input partitions and 8 event hub output partitions

As secções seguintes discutem alguns cenários de exemplo que são embaraçosamente paralelos.The following sections discuss some example scenarios that are embarrassingly parallel.

Consulta simplesSimple query

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: O centro de eventos com 8 divisórias ("Coluna-chave de partição" deve ser configurado para utilizar "PartitionId")Output: Event hub with 8 partitions ("Partition key column" must be set to use "PartitionId")

Consulta:Query:

    --Using compatibility level 1.2 or above
    SELECT TollBoothId
    FROM Input1
    WHERE TollBoothId > 100
    
    --Using compatibility level 1.0 or 1.1
    SELECT TollBoothId
    FROM Input1 PARTITION BY PartitionId
    WHERE TollBoothId > 100

Esta consulta é um filtro simples.This query is a simple filter. Portanto, não precisamos nos preocupar em dividir a entrada que está sendo enviada para o centro de eventos.Therefore, we don't need to worry about partitioning the input that is being sent to the event hub. Note que os postos de trabalho com nível de compatibilidade antes do 1.2 devem incluir a cláusula PARTITION BY PartitionId, pelo que preenche a exigência #2 anterior.Notice that jobs with compatibility level before 1.2 must include PARTITION BY PartitionId clause, so it fulfills requirement #2 from earlier. Para a saída, precisamos configurar a saída do centro de eventos no trabalho para ter a chave de partição definida para PartitionId.For the output, we need to configure the event hub output in the job to have the partition key set to PartitionId. Uma última verificação é para garantir que o número de divisórias de entrada seja igual ao número de divisórias de saída.One last check is to make sure that the number of input partitions is equal to the number of output partitions.

Consulta com uma chave de agrupamentoQuery with a grouping key

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: Armazenamento de bolhasOutput: Blob storage

Consulta:Query:

    --Using compatibility level 1.2 or above
    SELECT COUNT(*) AS Count, TollBoothId
    FROM Input1
    GROUP BY TumblingWindow(minute, 3), TollBoothId
    
    --Using compatibility level 1.0 or 1.1
    SELECT COUNT(*) AS Count, TollBoothId
    FROM Input1 Partition By PartitionId
    GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId

Esta consulta tem uma chave de agrupamento.This query has a grouping key. Por isso, os eventos agrupados devem ser enviados para a mesma partição do Event Hub.Therefore, the events grouped together must be sent to the same Event Hub partition. Uma vez que neste exemplo agruparemos a TollBoothID, devemos ter a certeza de que o TollBoothID é usado como chave de partição quando os eventos são enviados para o Event Hub.Since in this example we group by TollBoothID, we should be sure that TollBoothID is used as the partition key when the events are sent to Event Hub. Em seguida, na ASA, podemos usar partição by partitionId para herdar deste esquema de partição e permitir a total paralelização.Then in ASA, we can use PARTITION BY PartitionId to inherit from this partition scheme and enable full parallelization. Uma vez que a saída é armazenamento de bolhas, não precisamos nos preocupar em configurar um valor chave de partição, de acordo com o requisito #4.Since the output is blob storage, we don't need to worry about configuring a partition key value, as per requirement #4.

Exemplo de cenários que não são embaraçosamente paralelosExample of scenarios that are not embarrassingly parallel

Na secção anterior, mostrámos alguns cenários embaraçosos e paralelos.In the previous section, we showed some embarrassingly parallel scenarios. Nesta secção, discutimos cenários que não cumprem todos os requisitos para serem embaraçosamente paralelos.In this section, we discuss scenarios that don't meet all the requirements to be embarrassingly parallel.

Contagem de divisórias desajustadasMismatched partition count

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: Centro de eventos com 32 divisóriasOutput: Event hub with 32 partitions

Se a contagem de partição de entrada não corresponder à contagem de partição de saída, a topologia não é embaraçosamente paralela, independentemente da consulta.If the input partition count doesn't match the output partition count, the topology isn't embarrassingly parallel irrespective of the query. No entanto, ainda podemos obter algum nível ou paralelização.However we can still get some level or parallelization.

Consulta utilizando saída não divididaQuery using non-partitioned output

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: Power BIOutput: Power BI

A saída de Power BI não suporta atualmente a partição.Power BI output doesn't currently support partitioning. Portanto, este cenário não é embaraçoso paralelo.Therefore, this scenario is not embarrassingly parallel.

Consulta em várias etapas com diferentes partição por valoresMulti-step query with different PARTITION BY values

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: Centro de eventos com 8 divisóriasOutput: Event hub with 8 partitions
  • Nível de compatibilidade: 1.0 ou 1.1Compatibility level: 1.0 or 1.1

Consulta:Query:

    WITH Step1 AS (
    SELECT COUNT(*) AS Count, TollBoothId, PartitionId
    FROM Input1 Partition By PartitionId
    GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
    )

    SELECT SUM(Count) AS Count, TollBoothId
    FROM Step1 Partition By TollBoothId
    GROUP BY TumblingWindow(minute, 3), TollBoothId

Como pode ver, o segundo passo usa o TollBoothId como chave de partição.As you can see, the second step uses TollBoothId as the partitioning key. Este passo não é o mesmo que o primeiro passo, pelo que nos obriga a fazer uma baralhada.This step is not the same as the first step, and it therefore requires us to do a shuffle.

Consulta em várias etapas com diferentes partição por valoresMulti-step query with different PARTITION BY values

  • Entrada: Centro de eventos com 8 divisóriasInput: Event hub with 8 partitions
  • Saída: O centro de eventos com 8 divisórias ("Coluna-chave de partição" deve ser configurado para utilizar "TollBoothId")Output: Event hub with 8 partitions ("Partition key column" must be set to use "TollBoothId")
  • Nível de compatibilidade - 1.2 ou superiorCompatibility level - 1.2 or above

Consulta:Query:

    WITH Step1 AS (
    SELECT COUNT(*) AS Count, TollBoothId
    FROM Input1
    GROUP BY TumblingWindow(minute, 3), TollBoothId
    )

    SELECT SUM(Count) AS Count, TollBoothId
    FROM Step1
    GROUP BY TumblingWindow(minute, 3), TollBoothId

O nível de compatibilidade 1.2 ou superior permite a execução paralela por padrão.Compatibility level 1.2 or above enables parallel query execution by default. Por exemplo, a consulta da secção anterior será dividida enquanto a coluna "TollBoothId" for definida como chave de partição de entrada.For example, query from the previous section will be partitioned as long as "TollBoothId" column is set as input Partition Key. Não é necessária a cláusula partitionida.PARTITION BY PartitionId clause is not required.

Calcular as unidades de streaming máximas de um trabalhoCalculate the maximum streaming units of a job

O número total de unidades de streaming que podem ser utilizadas por um trabalho stream Analytics depende do número de passos na consulta definida para o trabalho e do número de divisórias para cada passo.The total 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 for each step.

Passos em consultaSteps in a query

Uma consulta pode ter um ou muitos passos.A query can have one or many steps. Cada passo é um subquery definido pela palavra-chave COM.Each step is a subquery defined by the WITH keyword. A consulta que está fora da palavra-chave COM (apenas uma consulta) é contada como um passo, tal como a declaração SELECT na seguinte consulta:The query that is outside the WITH keyword (one query only) is also counted as a step, such as the SELECT statement in the following query:

Consulta:Query:

    WITH Step1 AS (
        SELECT COUNT(*) AS Count, TollBoothId
        FROM Input1 Partition By PartitionId
        GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
    )
    SELECT SUM(Count) AS Count, TollBoothId
    FROM Step1
    GROUP BY TumblingWindow(minute,3), TollBoothId

Esta consulta tem dois passos.This query has two steps.

Nota

Esta consulta é discutida mais detalhadamente mais tarde no artigo.This query is discussed in more detail later in the article.

Partição um passoPartition a step

A partilha de um passo requer as seguintes condições:Partitioning a step requires the following conditions:

  • A fonte de entrada deve ser dividida.The input source must be partitioned.
  • A declaração SELECT da consulta deve ser lida a partir de uma fonte de entrada dividida.The SELECT statement of the query must read from a partitioned input source.
  • A consulta dentro do passo deve ter a partição por palavra-chave.The query within the step must have the PARTITION BY keyword.

Quando uma consulta é dividida, os eventos de entrada são processados e agregados em grupos de partição separados, e eventos de saídas são gerados para cada um dos grupos.When a query is partitioned, the input events are processed and aggregated in separate partition groups, and outputs events are generated for each of the groups. Se quiser um agregado combinado, deve criar um segundo passo não dividido para agregar.If you want a combined aggregate, you must create a second non-partitioned step to aggregate.

Calcular as unidades de streaming máximas para um trabalhoCalculate the max streaming units for a job

Todos os passos não divididos em conjunto podem escalar até seis unidades de streaming (SUs) para um trabalho stream Analytics.All non-partitioned steps together can scale up to six streaming units (SUs) for a Stream Analytics job. Além disso, pode adicionar 6 SUs para cada partição num passo dividido.In addition to this, you can add 6 SUs for each partition in a partitioned step. Pode ver alguns exemplos na tabela abaixo.You can see some examples in the table below.

ConsultaQuery Max SUs para o trabalhoMax SUs for the job
  • A consulta contém um passo.The query contains one step.
  • O passo não é dividido.The step is not partitioned.
66
  • O fluxo de dados de entrada é dividido por 16.The input data stream is partitioned by 16.
  • A consulta contém um passo.The query contains one step.
  • O passo está dividido.The step is partitioned.
96 (6 * 16 divisórias)96 (6 * 16 partitions)
  • A consulta contém dois passos.The query contains two steps.
  • Nenhum dos degraus está dividido.Neither of the steps is partitioned.
66
  • O fluxo de dados de entrada é dividido por 3.The input data stream is partitioned by 3.
  • A consulta contém dois passos.The query contains two steps. O passo de entrada é dividido e o segundo passo não.The input step is partitioned and the second step is not.
  • A declaração SELECT lê a partir da entrada dividida.The SELECT statement reads from the partitioned input.
24 (18 para etapas divididas + 6 para etapas não divididas24 (18 for partitioned steps + 6 for non-partitioned steps

Exemplos de escalaExamples of scaling

A seguinte consulta calcula o número de carros dentro de uma janela de três minutos passando por uma portagem que tem três portagens.The following query calculates the number of cars within a three-minute window going through a toll station that has three tollbooths. Esta consulta pode ser dimensionada até seis SUs.This query can be scaled up to six SUs.

    SELECT COUNT(*) AS Count, TollBoothId
    FROM Input1
    GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId

Para utilizar mais SUs para a consulta, tanto o fluxo de dados de entrada como a consulta devem ser divididos.To use more SUs for the query, both the input data stream and the query must be partitioned. Uma vez que a partição do fluxo de dados é definida para 3, a seguinte consulta modificada pode ser dimensionada até 18 SUs:Since the data stream partition is set to 3, the following modified query can be scaled up to 18 SUs:

    SELECT COUNT(*) AS Count, TollBoothId
    FROM Input1 Partition By PartitionId
    GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId

Quando uma consulta é dividida, os eventos de entrada são processados e agregados em grupos de partição separados.When a query is partitioned, the input events are processed and aggregated in separate partition groups. Os eventos de saída também são gerados para cada um dos grupos.Output events are also generated for each of the groups. A partição pode causar alguns resultados inesperados quando o campo GROUP BY não é a chave de partição no fluxo de dados de entrada.Partitioning can cause some unexpected results when the GROUP BY field is not the partition key in the input data stream. Por exemplo, o campo TollBoothId na consulta anterior não é a chave de partição do Input1.For example, the TollBoothId field in the previous query is not the partition key of Input1. O resultado é que os dados da TollBooth #1 podem ser espalhados em várias divisórias.The result is that the data from TollBooth #1 can be spread in multiple partitions.

Cada uma das divisórias Input1 será processada separadamente pela Stream Analytics.Each of the Input1 partitions will be processed separately by Stream Analytics. Como resultado, vários registos da contagem de carros para a mesma portagem na mesma janela Tumbling serão criados.As a result, multiple records of the car count for the same tollbooth in the same Tumbling window will be created. Se a chave de partição de entrada não puder ser alterada, este problema pode ser corrigido adicionando um passo de não partição aos valores agregados entre divisórias, como no exemplo seguinte:If the input partition key can't be changed, this problem can be fixed by adding a non-partition step to aggregate values across partitions, as in the following example:

    WITH Step1 AS (
        SELECT COUNT(*) AS Count, TollBoothId
        FROM Input1 Partition By PartitionId
        GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
    )

    SELECT SUM(Count) AS Count, TollBoothId
    FROM Step1
    GROUP BY TumblingWindow(minute, 3), TollBoothId

Esta consulta pode ser dimensionada para 24 SUs.This query can be scaled to 24 SUs.

Nota

Se estiver a unir dois fluxos, certifique-se de que os fluxos são divididos pela chave de partição da coluna que utiliza para criar as juntas.If you are joining two streams, make sure that the streams are partitioned by the partition key of the column that you use to create the joins. Certifique-se também de que tem o mesmo número de divisórias em ambos os riachos.Also make sure that you have the same number of partitions in both streams.

Alcançar posições mais elevadas à escalaAchieving higher throughputs at scale

Um trabalho embaraçoso paralelo é necessário, mas não suficiente para sustentar uma produção mais elevada à escala.An embarrassingly parallel job is necessary but not sufficient to sustain a higher throughput at scale. Cada sistema de armazenamento e a sua saída stream Analytics correspondente tem variações sobre como alcançar o melhor rendimento de escrita possível.Every storage system and its corresponding Stream Analytics output has variations on how to achieve the best possible write throughput. Como em qualquer cenário em escala, existem alguns desafios que podem ser resolvidos utilizando as configurações certas.As with any at-scale scenario, there are some challenges which can be solved by using the right configurations. Esta secção discute configurações para algumas saídas comuns e fornece amostras para manter taxas de ingestão de eventos de 1K, 5K e 10K por segundo.This section discusses configurations for a few common outputs and provides samples for sustaining ingestion rates of 1K, 5K and 10K events per second.

As seguintes observações usam um trabalho stream Analytics com consulta apátrida (passthrough), um JavaScript UDF básico que escreve para Event Hub, Azure SQL DB, ou Cosmos DB.The following observations use a Stream Analytics job with stateless (passthrough) query, a basic JavaScript UDF which writes to Event Hub, Azure SQL DB, or Cosmos DB.

Hub de EventosEvent Hub

Taxa de ingestão (eventos por segundo)Ingestion Rate (events per second) Unidades de streamingStreaming Units Recursos de SaídaOutput Resources
Mil1K 11 2 TU2 TU
5 m.5K 66 6 TU6 TU
10 K10K 1212 10 TU10 TU

A solução Event Hub escala linearmente em termos de unidades de streaming (SU) e produção, tornando-a a forma mais eficiente e performante de analisar e transmitir dados para fora do Stream Analytics.The Event Hub solution scales linearly in terms of streaming units (SU) and throughput, making it the most efficient and performant way to analyze and stream data out of Stream Analytics. Os postos de trabalho podem ser dimensionado até 192 SU, o que se traduz aproximadamente no processamento de até 200 MB/s, ou 19 triliões de eventos por dia.Jobs can be scaled up to 192 SU, which roughly translates to processing up to 200 MB/s, or 19 trillion events per day.

SQL do AzureAzure SQL

Taxa de ingestão (eventos por segundo)Ingestion Rate (events per second) Unidades de streamingStreaming Units Recursos de SaídaOutput Resources
Mil1K 33 S3S3
5 m.5K 1818 P4P4
10 K10K 3636 P6P6

O Azure SQL suporta a escrita em paralelo, chamada Partição Herdada, mas não é ativada por defeito.Azure SQL supports writing in parallel, called Inherit Partitioning, but it's not enabled by default. No entanto, permitir a partilha herdada, juntamente com uma consulta totalmente paralela, pode não ser suficiente para obter posições mais elevadas.However, enabling Inherit Partitioning, along with a fully parallel query, may not be sufficient to achieve higher throughputs. Os produção de escrita SQL dependem significativamente da configuração da sua base de dados e do esquema de tabela.SQL write throughputs depend significantly on your database configuration and table schema. O artigo SQL Output Performance tem mais detalhes sobre os parâmetros que podem maximizar o seu rendimento de escrita.The SQL Output Performance article has more detail about the parameters that can maximize your write throughput. Como indicado na saída Azure Stream Analytics para o artigo base de dados Azure SQL, esta solução não escala linearmente como um gasoduto totalmente paralelo para além de 8 divisórias e pode necessitar de repartição antes da saída SQL (ver INTO).As noted in the Azure Stream Analytics output to Azure SQL Database article, this solution doesn't scale linearly as a fully parallel pipeline beyond 8 partitions and may need repartitioning before SQL output (see INTO). Os SKUs premium são necessários para manter altas taxas de IO, juntamente com a sobrecarga de backups de registos que acontecem a cada poucos minutos.Premium SKUs are needed to sustain high IO rates along with overhead from log backups happening every few minutes.

Cosmos DBCosmos DB

Taxa de ingestão (eventos por segundo)Ingestion Rate (events per second) Unidades de streamingStreaming Units Recursos de SaídaOutput Resources
Mil1K 33 20K RU20K RU
5 m.5K 2424 60K RU60K RU
10 K10K 4848 120K RU120K RU

A produção de CosS da Stream Analytics foi atualizada para utilizar a integração nativa no nível de compatibilidade 1.2.Cosmos DB output from Stream Analytics has been updated to use native integration under compatibility level 1.2. O nível de compatibilidade 1.2 permite uma produção significativamente mais elevada e reduz o consumo de RU em comparação com 1.1, que é o nível de compatibilidade padrão para novos postos de trabalho.Compatibility level 1.2 enables significantly higher throughput and reduces RU consumption compared to 1.1, which is the default compatibility level for new jobs. A solução utiliza recipientes CosmosDB divididos em /deviceId e o resto da solução está configurado de forma idêntica.The solution uses CosmosDB containers partitioned on /deviceId and the rest of solution is identically configured.

Todas as amostras de streaming na Scale Azure usam um Event Hub como entrada que é alimentada por clientes de teste simuladores de carga.All Streaming at Scale Azure samples use an Event Hub as input that is fed by load simulating test clients. Cada evento de entrada é um documento JSON de 1KB, que traduz taxas de ingestão configuradas para taxas de produção (1MB/s, 5MB/s e 10MB/s) facilmente.Each input event is a 1KB JSON document, which translates configured ingestion rates to throughput rates (1MB/s, 5MB/s and 10MB/s) easily. Os eventos simulam um dispositivo IoT enviando os seguintes dados JSON (de forma encurtada) para dispositivos até 1K:Events simulate an IoT device sending the following JSON data (in a shortened form) for up to 1K devices:

{
    "eventId": "b81d241f-5187-40b0-ab2a-940faf9757c0",
    "complexData": {
        "moreData0": 51.3068118685458,
        "moreData22": 45.34076957651598
    },
    "value": 49.02278128887753,
    "deviceId": "contoso://device-id-1554",
    "type": "CO2",
    "createdAt": "2019-05-16T17:16:40.000003Z"
}

Nota

As configurações estão sujeitas a alterações devido aos vários componentes utilizados na solução.The configurations are subject to change due to the various components used in the solution. Para uma estimativa mais precisa, personalize as amostras para se adaptar ao seu cenário.For a more accurate estimate, customize the samples to fit your scenario.

Identificar estrangulamentosIdentifying Bottlenecks

Utilize o painel métrica no seu trabalho Azure Stream Analytics para identificar estrangulamentos no seu oleoduto.Use the Metrics pane in your Azure Stream Analytics job to identify bottlenecks in your pipeline. Reveja os eventos de entrada/saída para produção e "Atraso de marca de água" ou eventos retrospados para ver se o trabalho está a acompanhar a taxa de entrada.Review Input/Output Events for throughput and "Watermark Delay" or Backlogged Events to see if the job is keeping up with the input rate. Para as métricas do Event Hub, procure pedidos de aceleração e ajuste as Unidades limiares em conformidade.For Event Hub metrics, look for Throttled Requests and adjust the Threshold Units accordingly. Para as métricas da Cosmos DB, reveja max consumiu RU/s por intervalo de chaves de partição sob a produção para garantir que as suas gamas de chaves de partição são consumidas uniformemente.For Cosmos DB metrics, review Max consumed RU/s per partition key range under Throughput to ensure your partition key ranges are uniformly consumed. Para Azure SQL DB, monitorize Log IO e CPU.For Azure SQL DB, monitor Log IO and CPU.

Obter ajudaGet help

Para obter mais assistência, experimente o nosso Microsoft Q&Uma página de perguntas para a Azure Stream Analytics.For further assistance, try our Microsoft Q&A question page for Azure Stream Analytics.

Passos seguintesNext steps