Обзор и настройка единиц потоковой передачиUnderstand and adjust Streaming Units

Единицы потоковой передачи (SUs) представляют вычислительные ресурсы, выделенные для выполнения задания Stream Analytics.Streaming Units (SUs) represents the computing resources that are allocated to execute a Stream Analytics job. Чем больше число единиц потоковой передачи, тем больше выделяются дополнительные ресурсы ЦП и памяти для задания.The higher the number of SUs, the more CPU and memory resources are allocated for your job. Эта способность позволяет сосредоточиться на логике запросов и устраняет необходимость управления оборудованием для своевременного выполнения задания Stream Analytics.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.

Для обеспечения потоковой обработки с низкой задержкой все процессы Azure Stream Analytics происходят во временной памяти.To achieve low latency stream processing, Azure Stream Analytics jobs perform all processing in memory. При нехватке памяти выполнение потокового задания завершается с ошибкой.When running out of memory, the streaming job fails. Поэтому для рабочего задания важно контролировать использование ресурсов потокового задания и следить за тем, чтобы было выделено достаточное количество ресурсов для непрерывного выполнения заданий в режиме 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.

Показатель использования единиц потоковой передачи (%), который колеблется от 0 до 100 %, описывает потребление памяти рабочей нагрузки.The SU % utilization metric, which ranges from 0% to 100%, describes the memory consumption of your workload. Для потокового задания с минимальным объемом памяти использование единиц потоковой передачи обычно составляет от 10 до 20 %.For a streaming job with minimal footprint, this metric is usually between 10% to 20%. Если процентное соотношение использования единиц хранения низкое, а входные события задерживаются, скорее всего, рабочей нагрузке требуются дополнительные вычислительные ресурсы, для которых нужно увеличить число единиц потоковой передачи.If SU% utilization is low and input events get backlogged, your workload likely requires more compute resources, which requires you to increase the number of SUs. Учитывая случайные всплески, лучше держать показатель единицы хранения ниже 80 %.It’s best to keep the SU metric below 80% to account for occasional spikes. Корпорация Майкрософт рекомендует настроить отправку предупреждения при использовании единиц потоковой передачи на уровне 80 % для предотвращения нехватки ресурсов.Microsoft recommends setting an alert on 80% SU Utilization metric to prevent resource exhaustion. Дополнительные сведения см. в статье Настройка оповещений для заданий Azure Stream Analytics.For more information, see Tutorial: Set up alerts for Azure Stream Analytics jobs.

Настройка единиц потоковой передачи Stream AnalyticsConfigure Stream Analytics Streaming Units (SUs)

  1. Войдите в портал AzureSign in to Azure portal

  2. В списке ресурсов найдите задание Stream Analytics для масштабирования и откройте его.In the list of resources, find the Stream Analytics job that you want to scale and then open it. 

  3. На странице задания под заголовком Настройка выберите Масштаб.In the job page, under the Configure heading, select Scale. 

    Настройка задания Stream Analytics на портале Azure

  4. Используйте ползунок, чтобы задать количество единиц потоковой передачи для задания.Use the slider to set the SUs for the job. Обратите внимание, что существуют определенные ограничения параметров единиц потоковой передачи.Notice that you are limited to specific SU settings. 

  5. Вы можете изменить число назначенных для задания служб, даже если оно выполняется.You can change the number of SUs assigned to your job even when it is running. Это невозможно, если в задании используются несекционированные выходные данные или имеется многошаговый запрос с разными значениями секций.This is not possible if your job uses a non-partitioned output or has a multi-step query with different PARTITION BY values. При выполнении задания может быть ограничен выбор из набора значений SU.You maybe restricted to choosing from a set of SU values when the job is running.

Мониторинг производительности заданияMonitor job performance

На портале Azure можно отслеживать пропускную способность задания:Using the Azure portal, you can track the throughput of a job:

Отслеживание заданий Azure Stream Analytics

Рассчитайте ожидаемую пропускную способность рабочей нагрузки.Calculate the expected throughput of the workload. Если пропускная способность меньше, чем ожидалось, настройте входную секцию и запрос, а также добавьте в задание дополнительные единицы потоковой передачи.If the throughput is less than expected, tune the input partition, tune the query, and add SUs to your job.

Сколько единиц потоковой передачи требуется для задания?How many SUs are required for a job?

Выбор числа единиц потоковой передачи, требуемых для конкретного задания, зависит от конфигурации входных данных и запроса, определенного в задании.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. В колонке Масштаб можно задать требуемое число единиц потоковой передачи.The Scale page allows you to set the right number of SUs. Мы рекомендуем выделять больше единиц потоковой передачи, чем требуется.It is a best practice to allocate more SUs than needed. Модуль обработки Stream Analytics оптимизирует задержки и пропускную способность за счет выделения дополнительной памяти.The Stream Analytics processing engine optimizes for latency and throughput at the cost of allocating additional memory.

В общем лучше всего начать с 6 единиц потоковой передачи для запросов, не использующих PARTITION BY.In general, the best practice is to start with 6 SUs for queries that don't use PARTITION BY. Затем определите "золотую середину", используя метод проб и ошибок, при котором вы изменяете число единиц потоковой передачи после передачи репрезентативного объема данных и просмотра метрики процента использования единицы потоковой передачи.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. Максимальное количество единиц потоковой передачи, которое может использовать задание Stream Analytics, зависит от количества шагов в запросе, определенном для задания и количества разделов на каждом шаге.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. Дополнительные сведения об ограничениях см. здесь.You can learn more about the limits here.

Дополнительные сведения о выборе оптимального числа единиц потоковой передачи см. в статье Масштабирование заданий Azure Stream Analytics для повышения пропускной способности.For more information about choosing the right number of SUs, see this page: Scale Azure Stream Analytics jobs to increase throughput

Примечание

Выбор необходимого количества единиц потоковой передачи для конкретного задания зависит от конфигурации секции для входных данных и запроса, определенного для задания.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. Вы можете выбрать для задания количество единиц потоковой передачи согласно указанной квоте.You can select up to your quota in SUs for a job. По умолчанию каждая подписка Azure имеет квоту до 500 SUs для всех заданий аналитики в определенном регионе.By default, each Azure subscription has a quota of up to 500 SUs for all the analytics jobs in a specific region. Чтобы увеличить количество единиц потоковой передачи для своей подписки, свяжитесь со службой технической поддержки Майкрософт.To increase SUs for your subscriptions beyond this quota, contact Microsoft Support. Для задания допустимые значения количества начинаются с 1, 3, 6 и затем по возрастающей с шагом в 6.Valid values for SUs per job are 1, 3, 6, and up in increments of 6.

Факторы, повышающие процент использования единиц потоковой передачиFactors that increase SU% utilization 

Элементы темпорального запроса (ориентированные на время) являются основным набором операторов с отслеживанием состояния, которые предоставляет Stream Analytics.Temporal (time-oriented) query elements are the core set of stateful operators provided by Stream Analytics. Stream Analytics контролирует состояние этих операций изнутри от имени пользователя, управляя уровнем потребления памяти, контрольными точками для обеспечения устойчивости и восстановлением состояния во время обновления.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. Несмотря на то что Stream Analytics полностью управляет состоянием, существует несколько рекомендаций, которые следует учитывать пользователям.Even though Stream Analytics fully manages the states, there are a number of best practice recommendations that users should consider.

Обратите внимание на то, что задание со сложной логикой запроса может иметь высокий процент использования единиц потоковой передачи даже в том случае, если оно не получает входные события на постоянной основе.Note that a job with complex query logic could have high SU% utilization even when it is not continuously receiving input events. Это может произойти после внезапного пика в событиях ввода-вывода.This can happen after a sudden spike in input and output events. При сложном запросе задание может продолжать хранить состояние в памяти.The job might continue to maintain state in memory if the query is complex.

Использование единиц хранения может внезапно упасть до 0 в течение короткого периода времени, прежде чем ожидаемый уровень будет восстановлен.SU% utilization may suddenly drop to 0 for a short period before coming back to expected levels. Это происходит из-за временных ошибок или системных обновлений.This happens due to transient errors or system initiated upgrades. Увеличение числа единиц потоковой передачи для задания может не снизить использование SU%, если запрос не является полностью параллельным.Increasing number of streaming units for a job might not reduce SU% Utilization if your query is not fully parallel.

При сравнении использования в течение определенного периода времени используйте метрики частоты событий.While comparing utilization over a period of time, use event rate metrics. Метрики Инпутевентс и Аутпутевентс показывают, сколько событий было прочитано и обработано.InputEvents and OutputEvents metrics show how many events were read and processed. Существуют метрики, указывающие количество событий ошибок, например ошибки десериализации.There are metrics that indicate number of error events as well, such as deserialization errors. При увеличении числа событий за единицу времени в большинстве случаев перенимается SU%.When the number of events per time unit increases, SU% increases in most cases.

Логика запроса с отслеживанием состояния во временных элементахStateful query logic in temporal elements

Одной из уникальных возможностей задания Azure Stream Analytics является выполнение обработки с учетом состояния, например агрегаты данных на основе периодов, темпоральные соединения и темпоральные аналитические функции.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. Каждый из этих операторов сохраняет сведения о состоянии.Each of these operators keeps state information.Максимальный период времени для этих элементов запроса составляет семь дней. The maximum window size for these query elements is seven days.

Концепция временного окна представлена в следующих элементах запросов Stream Analytics.The temporal window concept appears in several Stream Analytics query elements:

  1. Агрегаты данных на основе периодов (оператор группирования GROUP BY по "переворачивающимся", "прыгающим" и "скользящим" окнам).Windowed aggregates: GROUP BY of Tumbling, Hopping, and Sliding windows

  2. Темпоральные соединения: функция JOIN с DATEDIFF.Temporal joins: JOIN with DATEDIFF function

  3. Темпоральные аналитические функции: ISFIRST, LAST и LAG с LIMIT DURATION.Temporal analytic functions: ISFIRST, LAST, and LAG with LIMIT DURATION

Следующие факторы влияют на объем памяти (элемент метрики единиц потоковой передачи), потребляемый заданиями Stream Analytics.The following factors influence the memory used (part of streaming units metric) by Stream Analytics jobs:

Агрегаты данных на основе периодовWindowed aggregates

Объем потребляемой памяти (размер состояния) для агрегата данных на основе периодов не всегда прямо пропорционален периоду.The memory consumed (state size) for a windowed aggregate is not always directly proportional to the window size. На самом деле, потребляемая память пропорциональна кратности данных или количеству групп в каждом периоде.Instead, the memory consumed is proportional to the cardinality of the data, or the number of groups in each time window.

Например, в следующем запросе число, связанное с clusterid, является кратностью запроса.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)

Чтобы устранить проблемы, вызванные большим количеством элементов в предыдущем запросе, можно отправить события в концентратор событий, секционированные по clusterid , и выполнить масштабирование запроса, разрешив системе обрабатывать каждую входную секцию отдельно с помощью Partition, как показано в следующем примере: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)

Секционированный запрос распределяется между несколькими узлами.Once the query is partitioned out, it is spread out over multiple nodes. В результате число значений clusterid, попадающих в каждый узел, уменьшается, тем самым уменьшая кратность группы по оператору.As a result, the number of clusterid values coming into each node is reduced thereby reducing the cardinality of the group by operator. 

Разделы концентратора событий должны быть разделены с помощью ключа группирования, чтобы вам не нужно было выполнять шаг по уменьшению.Event Hub partitions should be partitioned by the grouping key to avoid the need for a reduce step. Дополнительные сведения см. в статье Что такое Центры событий?For more information, see Event Hubs overview. 

Временные соединенияTemporal joins

Потребляемая память (размер состояния) временного объединения пропорциональна количеству событий в темпоральной колебания комнате объединения, то есть скорости ввода событий, умноженной на размер комнаты колебания.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. Другими словами, память, потребляемая соединением, пропорциональна диапазону времени DateDiff, умноженному на среднюю частоту событий.In other words, the memory consumed by joins is proportional to the DateDiff time range multiplied by average event rate.

Число несопоставленных событий в соединении влияет на использование памяти для выполнения запроса.The number of unmatched events in the join affect the memory utilization for the query. Следующий запрос ищет просмотры рекламы, которые привели к переходам: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.

Например, возможно, рекламу просмотрело множество людей, но только некоторые щелкнули ее. При этом все события требуется хранить в рамках временного окна.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. Объем используемой памяти пропорционален размеру окна и частоте событий.Memory consumed is proportional to the window size and event rate. 

Чтобы устранить эту проблему, отправьте события в концентратор событий, секционированный по ключам объединения (идентификатор в данном случае), и выполните масштабирование запроса, разрешив системе обрабатывать каждую входную секцию отдельно с помощью Partition, как показано ниже.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 

Секционированный запрос распределяется между несколькими узлами.Once the query is partitioned out, it is spread out over multiple nodes. В результате уменьшается не только число событий, поступающих на каждый узел, но и размер состояния, сохраненного в окне соединения.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. 

Темпоральные аналитические функцииTemporal analytic functions

Потребляемая память (размер состояния) темпоральной аналитической функции пропорциональна частоте событий, умноженной на длительность.The memory consumed (state size) of a temporal analytic function is proportional to the event rate multiply by the duration.Память, потребляемая аналитическими функциями, не пропорциональна периоду, но пропорциональна количеству разделов в каждом периоде. The memory consumed by analytic functions is not proportional to the window size, but rather partition count in each time window.

Решение аналогично решению для темпорального соединения.The remediation is similar to temporal join. Вы можете развернуть запрос, используя PARTITION BY.You can scale out the query using PARTITION BY. 

Неупорядоченный буферOut of order buffer 

Пользователь может настроить размер неупорядоченного буфера на панели конфигурации упорядочения событий.User can configure the out of order buffer size in the Event Ordering configuration pane. Буфер используется для хранения входных данных в течение определенного периода и изменения их порядка.The buffer is used to hold inputs for the duration of the window, and reorder them. Размер буфера пропорционален частоте ввода событий, умноженной на размер неупорядоченного окна.The size of the buffer is proportional to the event input rate multiply by the out of order window size. Размер окна по умолчанию равен 0.The default window size is 0. 

Для устранения переполнения неупорядоченного буфера нужно развернуть запрос с помощью ключевого слова PARTITION BY.To remediate overflow of the out of order buffer, scale out query using PARTITION BY. Секционированный запрос распределяется между несколькими узлами.Once the query is partitioned out, it is spread out over multiple nodes. В результате уменьшается не только число событий, поступающих на каждый узел, но и количество событий в каждом упорядоченном буфере.As a result, the number of events coming into each node is reduced thereby reducing the number of events in each reorder buffer. 

Количество входящих разделовInput partition count 

Для каждого входящего раздела входных данных задания предусмотрен буфер.Each input partition of a job input has a buffer. Чем больше количество входных разделов, тем больше ресурсов потребляет задание.The larger number of input partitions, the more resource the job consumes. Для каждой единицы потоковой передачи Azure Stream Analytics может обработать примерно 1 МБ входных данных в секунду.For each streaming unit, Azure Stream Analytics can process roughly 1 MB/s of input. Таким образом можно выполнить оптимизацию, сопоставив число единиц потоковой передачи Stream Analytics с числом разделов в концентраторе событий.Therefore, you can optimize by matching the number of Stream Analytics streaming units with the number of partitions in your Event Hub.

Как правило, задания, настроенного с одной единицей потоковой передачи, достаточно для концентратора событий с двумя разделами (минимальное требование для концентратора событий).Typically, a job configured with one streaming unit is sufficient for an Event Hub with two partitions (which is the minimum for Event Hub). Если концентратор событий содержит большее число разделов, задание Stream Analytics потребляет больше ресурсов, но не всегда использует дополнительную пропускную способность, предоставляемую концентратором событий.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.

Для задания с 6 единицами потоковой передачи может понадобиться 4 или 8 разделов из концентратора событий.For a job with 6 streaming units, you may need 4 or 8 partitions from the Event Hub. Однако избегайте создания слишком большого количества ненужных разделов, так как это приводит к чрезмерному использованию ресурсов.However, avoid too many unnecessary partitions since that causes excessive resource usage. Например, концентратор событий с 16 разделами (и больше) в задании Stream Analytics с 1 единицей потоковой передачи.For example, an Event Hub with 16 partitions or larger in a Stream Analytics job that has 1 streaming unit.

Ссылочные данныеReference data 

Ссылочные данные в ASA загружаются в память для быстрого поиска.Reference data in ASA are loaded into memory for fast lookup. В текущей реализации для каждой операции соединения со ссылочными данными их копия сохраняется в памяти даже при соединении с использованием одних ссылочных данных несколько раз.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. Для запросов, содержащих PARTITION BY, каждый раздел имеет копию ссылочных данных, поэтому разделы полностью разделены.For queries with PARTITION BY, each partition has a copy of the reference data, so the partitions are fully decoupled. Если вы несколько раз присоединяетесь к ссылочным данным с несколькими разделами, то из-за эффекта увеличения использование памяти может быстро вырасти.With the multiplier effect, memory usage can quickly get very high if you join with reference data multiple times with multiple partitions.  

Использование определяемых пользователем функцийUse of UDF functions

При добавлении определяемой пользователем функции Azure Stream Analytics загружает в память среду выполнения JavaScript.When you add a UDF function, Azure Stream Analytics loads the JavaScript runtime into memory. Это влияет на процент единиц потоковой передачи.This will affect the SU%.

Дальнейшие шагиNext steps