Устранение неполадок входных подключений Azure Stream Analytics

В этой статье описываются распространенные проблемы во входных подключениях Azure Stream Analytics, способы устранения неполадок и их исправления. Рассматриваемые проблемы включают ошибки десериализации, вызванные неправильно сформированными событиями, ограничения на количество получателей Event Hubs, изменения числа разделов и ограничения на количество считывателей Центр Интернета вещей.

Для выполнения многих шагов по устранению неполадок необходимо, чтобы вы включили журналы ресурсов для задания Stream Analytics. Если у вас нет включенных журналов ресурсов, см. статью "Устранение неполадок Azure Stream Analytics с помощью журналов ресурсов".

Задание не получает входные события

  1. Проверьте подключение к входным и выходным данным. Используйте кнопку Проверить подключение для каждого входа и выхода.

  2. Проверьте входные данные:

    1. Используйте кнопку "Пример данных " для каждого входного ввода. Скачайте образец входных данных.

    2. Проверьте примеры данных, чтобы понять схему и типы данных.

    3. Проверьте метрики Центры событий Azure, чтобы убедиться, что события отправляются. Метрики сообщений должны быть больше нуля, если центры событий получают сообщения.

  3. Убедитесь, что в предварительном просмотре входных данных выбран диапазон времени. Выберите диапазон времени и введите пример длительности перед тестированием запроса.

Important

Для заданий Azure Stream Analytics, которые не интегрированы в виртуальную сеть, ни в коем случае не полагайтесь на IP-адрес источника подключений, поступающих из Stream Analytics. Это могут быть публичные или частные IP-адреса в зависимости от операций в инфраструктуре сервиса, которые время от времени выполняются.

Некорректные входные события вызывают ошибки десериализации

Проблемы десериализации возникают, когда входной поток задания Stream Analytics содержит некорректно сформированные сообщения. Например, отсутствующие скобки или фигурные скобки в объекте JSON или неправильный формат метки времени в поле времени могут привести к неправильному сообщению.

Когда задание Stream Analytics получает неправильно сформированное сообщение во входных данных, оно отбрасывает это сообщение и уведомляет вас с помощью предупреждения. На плитке "Входные данные " задания Stream Analytics отображается символ предупреждения. Символ предупреждения отображается, пока задание выполняется.

Снимок экрана: плитка

Включите журналы ресурсов для просмотра сведений об ошибке и сообщения (полезных данных), вызвавших ошибку. Существует несколько причин, по которым могут возникнуть ошибки десериализации. Дополнительные сведения об определенных ошибках десериализации см. в разделе "Входные ошибки данных". Если журналы ресурсов не включены, на портале Azure появится краткое уведомление.

Снимок экрана: предупреждение о входных данных.

Если размер полезной нагрузки сообщения превышает 32 КБ или она имеет двоичный формат, запустите код CheckMalformedEvents.cs, доступный в репозитории примеров на GitHub. Этот код считывает смещение идентификатора секции и выводит данные, расположенные в этом смещение.

Ниже перечислены другие распространенные причины ошибок десериализации ввода:

  • Целый столбец, имеющий значение больше 9223372036854775807.
  • Строки вместо массива объектов или объектов, разделенных строками. Допустимый пример: [{'a':1}]. Недопустимый пример: "'a' :1".
  • Центры событий захватывают большой двоичный объект в формате Avro, используемом в качестве входных данных в задании.
  • Два столбца в одном входном событии, которые различаются только в случае, например column1 и COLUMN1.

Изменение числа секций центра событий

Если во время выполнения задания Stream Analytics изменяется число разделов центратора событий, задание завершается со следующей ошибкой:

Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

Чтобы устранить эту проблему, остановите и перезапустите задание Stream Analytics, чтобы обнаружить новое число секций.

Задание превышает максимальное число приемников Центров событий

При использовании Event Hubs рекомендуется применять несколько групп потребителей для масштабирования заданий. Количество читателей в задании Stream Analytics для определённого входного источника влияет на количество читателей в отдельной группе потребителей.

Точное количество приёмников определяется внутренними деталями реализации логики топологии горизонтального масштабирования. Это число недоступно извне. Число читателей может измениться при запуске задания или его обновлении.

Следующее сообщение об ошибке появляется, когда количество получателей превышает максимально допустимое значение. Это сообщение содержит список существующих подключений к Центрам событий в группе потребителей. Тег AzureStreamAnalytics указывает, что подключения относятся к службе потоковой передачи Azure.

The streaming job failed: Stream Analytics job has validation errors: Job will exceed the maximum amount of Event Hubs Receivers.

The following information may be helpful in identifying the connected receivers: Exceeded the maximum number of allowed receivers per partition in a consumer group which is 5. List of connected receivers – 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1, 
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1.

Note

При изменении количества считывателей при обновлении задания в журналы аудита записываются временные предупреждения. Задания Stream Analytics автоматически восстанавливаются после этих временных проблем.

Чтобы добавить новую группу потребителей в экземпляре Центров событий, выполните следующие действия.

  1. Войдите на портал Azure.

  2. Найдите центр событий.

  3. В разделе " Сущности" выберите Центры событий.

  4. Выберите центр событий по имени.

  5. На странице экземпляра Центров событий в заголовке сущностей выберите группы потребителей. Указана группа потребителей с именем $Default .

  6. Выберите +Группа потребителей , чтобы добавить новую группу потребителей.

    Снимок экрана: кнопка добавления группы потребителей в Центры событий.

  7. При создании входных данных в задании Stream Analytics для указания на концентратор событий вы указали там группу потребителей. Центры событий используют $Default , если группа потребителей не указана. После создания группы потребителей измените входные данные концентратора событий в задании Stream Analytics и укажите имя новой группы потребителей.

Количество считывателей на раздел превышает ограничение Event Hubs

Если синтаксис потокового запроса ссылается на один ресурс для входных данных концентратора событий несколько раз, подсистема заданий может использовать несколько читателей для каждого запроса из той же группы потребителей. Если ссылок на одну и ту же группу потребителей слишком много, задание может превысить лимит в пять и вызвать ошибку. В таких случаях можно выполнить дальнейшее разделение, используя несколько входных потоков в нескольких группах потребителей.

Сценарии, в которых число читателей на раздел превышает ограничение Event Hubs в пять читателей, включают:

  • Несколько SELECT операторов: при использовании нескольких SELECT операторов, которые ссылаются на одни и те же входные данные концентратора событий, каждая SELECT инструкция приводит к созданию нового приемника.

  • UNION: при использовании UNIONможно использовать несколько входных данных, ссылающихся на одну и ту же концентратор событий и группу потребителей.

  • SELF JOIN: при использовании SELF JOIN операции можно ссылаться на один концентратор событий несколько раз.

Следующие рекомендации помогут снизить вероятность ситуаций, в которых число читателей на раздел превышает ограничение Event Hubs, составляющее пять.

Разделение запроса на несколько шагов с помощью предложения WITH

Предложение WITH задаёт временный именованный результирующий набор, на который может ссылаться предложение FROM в запросе. Вы определяете условие WITH в контексте выполнения одного оператора SELECT.

Например, вместо этого запроса:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Используйте этот запрос:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Убедитесь, что входные данные привязываются к разным группам потребителей

Для запросов, в которых три или более входных данных подключены к одной группе потребителей Центров событий, создайте отдельные группы потребителей. Для этой задачи требуется создание дополнительных входных данных Stream Analytics.

Создание отдельных входных данных с различными группами потребителей

Вы можете создавать отдельные входные данные с разными группами потребителей для одного концентратора событий. В следующем примере запроса UNION, InputOne и InputTwo ссылаются на один и тот же источник Event Hubs. Любой запрос может иметь отдельные входные данные с разными группами потребителей. UNION запрос — лишь один пример.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Число читателей на раздел превышает ограничение Центр Интернета вещей

Задания Stream Analytics используют встроенную конечную точку, совместимую с Центрами событий, в Центр Интернета вещей Azure для подключения и чтения событий из Центр Интернета вещей. Если число читателей на раздел превышает ограничения Центр Интернета вещей, можно использовать решения для Event Hubs, чтобы решить эту проблему. Вы можете создать группу потребителей для встроенной конечной точки в разделе конечных точек портала Центр Интернета вещей или с помощью Центр Интернета вещей SDK.

Получите помощь

Дополнительные сведения см. на странице Microsoft Q&A для Azure Stream Analytics.

Дальнейшие действия