Гарантии доставки событий (Azure Stream Analytics)

Язык запросов Azure Stream Analytics расширяет синтаксис SQL, позволяя выполнять сложные вычисления в потоках событий. В Stream Analytics есть несколько концепций, связанных с доставкой событий, которые стоит обсудить:

  • Ровно один раз обработки
  • Ровно один раз доставки
  • Дублирование записей

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

Обработка ровно один раз

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

Доставка ровно один раз

Гарантия однократной доставки означает, что все выходные данные обработки ровно один раз доставляются в приемник выходных данных, поэтому дублирующиеся выходные данные отсутствуют. Для этого требуются возможности транзакций в выходном адаптере.

Azure Stream Analytics гарантирует по крайней мере один раз доставку в приемники выходных данных, что гарантирует, что все результаты будут выведены, но могут возникнуть повторяющиеся результаты. Однако однократная доставка может быть достигнута с помощью нескольких выходных данных, таких как Azure Cosmos DB или Azure SQL.

Дублирование записей

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

  • Экземпляр Azure обновляется во время выполнения задания
  • Задание Stream Analytics обновляется или возникает проблема с подключением или надежностью к выходным данным задания
  • Экземпляр Azure, на котором выполняется задание, имеет сбой
  • Задание Stream Analytics запускается с параметром при последней остановке

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

Выходные данные, поддерживающие однократную доставку с помощью Azure Stream Analytics

Azure Cosmos DB

Используя Azure Cosmos DB, Azure Stream Analytics гарантирует доставку ровно один раз. Так как Azure Stream Analytics использует upsert, пользователь не требует никаких действий. См. дополнительные сведения о выходных данных Azure Stream Analytics в Azure Cosmos DB.

SQL

При использовании выходных данных SQL пользователи могут выполнить ровно один раз доставку при соблюдении следующих требований:

  • все события потоковой передачи выходных данных имеют естественный ключ, т. е. однозначно идентифицируются по полю или сочетанию полей.
  • в выходной таблице SQL есть уникальное ограничение (или первичный ключ), созданное с помощью естественного ключа выходных событий.

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

таблице Azure

Все сущности в таблице службы хранилища Azure однозначно идентифицируются объединением RowKey полей и PartitionKey . Azure Stream Analytics выполняет upsert сущности, поэтому значение сущности таблицы будет последним выходным событием с соответствующим RowKey/PartitionKey сочетанием. Таким образом, чтобы обеспечить доставку ровно один раз, убедитесь, что каждое выходное событие имеет уникальное RowKey/PartitionKey сочетание. В этом случае повторяющиеся события будут перезаписывать более ранние версии. (Системное поле, которое является временем последнего изменения сущности, в этом случае по-прежнему Timestamp изменится.)

См. также:

Операции управления временем