Garantias de Entrega de Eventos (Azure Stream Analytics)
A linguagem de consulta do Azure Stream Analytics expande a sintaxe do SQL para permitir cálculos complexos através de fluxos de eventos. Com o Stream Analytics, existem alguns conceitos relacionados com a Entrega de Eventos que vale a pena discutir:
- Processamento exatamente uma vez
- Entrega exatamente uma vez
- Duplicar registos
Além destes conceitos detalhados abaixo, é importante considerar a opção de início de uma tarefa para garantir que não pode ocorrer nenhuma perda de dados.
Processamento exatamente uma vez
A garantia de processamento exatamente uma vez significa que, tendo em conta um conjunto de entradas, o sistema devolve sempre os mesmos resultados. Isto é muito importante para a repetibilidade e aplica-se mesmo em caso de reinício da tarefa ou em várias tarefas em execução em paralelo na mesma entrada. O Azure Stream Analytics garante exatamente uma vez o processamento.
Entrega exatamente uma vez
A garantia de entrega exatamente uma vez significa que todas as saídas do processamento exatamente uma vez são entregues ao sink de saída exatamente uma vez, pelo que não existe nenhuma saída duplicada. Isto requer a obtenção de capacidades transacionais no adaptador de saída.
O Azure Stream Analytics garante, pelo menos, uma entrega aos sinks de saída, o que garante que todos os resultados são obtidos, mas podem ocorrer resultados duplicados. No entanto, a entrega exatamente uma vez pode ser obtida com várias saídas, como o Azure Cosmos DB ou SQL do Azure.
Duplicar registos
Devido à garantia de entrega pelo menos uma vez, quando uma tarefa do Stream Analytics está em execução, os registos duplicados podem ocasionalmente ser notados nos dados de saída. Estes registos duplicados são esperados porque os adaptadores de saída do Azure Stream Analytics não escrevem os eventos de saída de forma transacional. Este cenário de "registo duplicado" pode resultar se ocorrer uma das seguintes condições:
- A instância do Azure é atualizada enquanto a tarefa está em execução
- A tarefa do Stream Analytics é atualizada ou ocorre um problema com conectividade ou fiabilidade à saída da tarefa
- A instância do Azure que está a executar a tarefa tem uma falha
- A tarefa do Stream Analytics é iniciada com a opção quando foi parada pela última vez
O consumidor a jusante dos eventos de saída tem de eliminar os eventos com a identidade lógica dos eventos. Por exemplo, se estiver a agregar eventos por grupos numa janela em cascata, a identidade lógica do evento é os grupos e a hora de fim da janela em cascata. Se estiver a executar uma consulta pass through, poderá ter de carregar um ID exclusivo no evento para anular a eliminação de dados.
Saída que suporta a entrega exata uma vez com o Azure Stream Analytics
Azure Cosmos DB
Com o Azure Cosmos DB, o Azure Stream Analytics garante a entrega exatamente uma vez. Uma vez que o Azure Stream Analytics utiliza upsert, não é necessária nenhuma ação por parte do utilizador. Veja mais informações sobre a saída do Azure Stream Analytics para o Azure Cosmos DB.
SQL
Ao utilizar a saída do SQL, os utilizadores podem obter a entrega exatamente uma vez se os seguintes requisitos forem cumpridos:
- todos os eventos de transmissão em fluxo de saída têm uma chave natural, ou seja, são exclusivamente identificáveis por um campo ou por uma combinação de campos.
- a tabela SQL de saída tem uma restrição exclusiva (ou chave primária) criada com a chave natural dos eventos de saída.
Isto é suficiente para evitar duplicados porque a saída do SQL honra todas as restrições colocadas na tabela ao ignorar quaisquer eventos que causem uma violação de restrição exclusiva.
Tabela do Azure
Todas as entidades numa Tabela de Armazenamento do Azure são identificadas exclusivamente pela concatenação dos RowKey
campos e PartitionKey
. O Azure Stream Analytics aumenta as entidades, pelo que o valor de uma entidade de tabela será o evento de saída mais recente com a combinação correspondente RowKey
/PartitionKey
. Por conseguinte, para obter uma entrega exatamente uma vez, certifique-se de que cada evento de saída tem uma combinação exclusiva RowKey
/PartitionKey
. Se isto estiver concluído, os eventos duplicados substituirão versões anteriores. (O campo definido pelo Timestamp
sistema, que é a última hora modificada para a entidade, continuará a ser alterado neste caso.)