Azure Stream Analytics для концентратора событий очень медленный

Stream Analytics работа занимает несколько минут, чтобы вывести результаты на Event Hub,

Stateless Web API Azure Service Fabric Приложение распределено по 8 узлам. Приложение очень простое, состоящее из одного Controller, который:

  1. Получает серию JSON объекты
  2. Инициализирует серию экземпляров EventData, которые обертывают каждый JSON объект
  3. Устанавливает PartitionKey свойство каждого события EventData для machine-name значение
  4. Публикует JSON объекты в виде одной партии EventData случаи к Azure Event Hub

JSON Полезная нагрузка представляет собой простую серию IP addresses а также time-stamps, следующее:

[{
    "IPAddress": "10.0.0.2",
    "Time": "2016-08-17T12:00:01",
    "MachineName": "MACHINE01"
}, {
    "IPAddress": "10.0.0.3",
    "Time": "2016-08-17T12:00:02",
    "MachineName": "MACHINE01"
}]

После получения Event Hub действует как вход в Stream Analytics задание, которое выполняет следующее Query:

SELECT 
    IPAddress, COUNT(*) AS Total, MachineName
INTO 
    Output
FROM 
    Input TIMESTAMP BY TIME
    PARTITION BY PartitionId
GROUP BY 
    TUMBLINGWINDOW(MINUTE, 1), IPAddress, MachineName, PartitionId
HAVING Total >= 2

Обратите внимание, что Query разделен на PartitionId, где PartitionId установлен на machine-name происхождения Service Fabric приложение. Поэтому будет максимум 8 PartitionKeys

Есть 8 человек Service Fabric экземпляры и 8 соответствующих Partitions назначен на вход Event Hub,

Наконец, Stream Analytics работа выводит результат на 2-й Event Hub, Опять же это Event Hub имеет 8 разделов. Stream AnalyticsQuery сохраняет machine-name, который используется в качестве PartitionKey выход Event Hub, Выходной формат JSON,

В лучшем случае этот процесс занимает 30-60 секунд, а иногда и несколько минут, чтобы один HTTP-запрос достиг результата. Event Hub, Узкое место, кажется, является Stream Analytics работа, учитывая, что ASP.NET Приложение публикует EventData партии в подсекундных временных масштабах.

Редактировать:

Применение настраиваемого поля к Timestamp By добавляет большую задержку, когда в сочетании с Group By пункт. Я достиг приемлемой задержки (1-2 секунды) при удалении Timestamp By пункт.

Оптимальный Query как следует:

SELECT
    Count(*) AS Total, IPAddress
FROM
    Input
    Partition by PartitionId
GROUP BY TUMBLINGWINDOW(MINUTE, 1), IPAddress, PartitionId

Тем не менее, добавив Having предложение приводит к увеличению задержки до 10-20 секунд:

SELECT
    Count(*) AS Total, IPAddress
FROM
    Input
    Partition by PartitionId
GROUP BY TUMBLINGWINDOW(MINUTE, 1), IPAddress, PartitionId
HAVING Total >= 10

Без возможности агрегировать данные в Query, используя Having пункт, своевременно, кажется, победить цель.

Между прочим, Streaming Units, Partitions, Input а также Output настроены оптимально, в соответствии с этим руководством для достижения параллелизма с Stream Analytics,

0 ответов

Другие вопросы по тегам