Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um grafo de fluxo de dados é um pipeline configurável que processa os dados à medida que eles se movem pelo Operações do Azure IoT. Um fluxo de dados padrão segue uma sequência fixa de enriquecer, filtrar e mapear, mas um grafo de fluxo de dados permite compor transformações em qualquer ordem, ramificar em caminhos paralelos e agregar dados ao longo de janelas de tempo.
O DataflowGraph recurso personalizado Kubernetes define um grafo de fluxo de dados. Dentro do recurso, você conecta fontes, transformações e destinos para construir pipelines de processamento que correspondam ao seu cenário.
Importante
Atualmente, os grafos de fluxo de dados dão suporte apenas a endpoints MQTT, Kafka e OpenTelemetry. Não há suporte para outros tipos de ponto de extremidade, como Data Lake, Microsoft Fabric OneLake, Azure Data Explorer e Armazenamento Local.
Fluxos de dados versus grafos de fluxo de dados
As Operações de IoT do Azure fornecem duas maneiras de processar dados em um pipeline:
| Capacidade | Fluxos de dados | Gráficos de fluxo de dados |
|---|---|---|
| Forma do pipeline | Corrigido: enriquecer, filtrar, mapear | Flexível: qualquer ordem, ramificação, mesclagem |
| Tipos de transformação | Mapear, filtrar, enriquecer | Mapear, filtrar, ramificar, concatenar, janela, limitação, enriquecer |
| Agregação baseada em tempo | Não disponível | Transformações de janela com janelas deslizantes |
| Roteamento condicional | Não disponível | Transformações de ramificação e concatenação |
| Suporte ao ponto de extremidade | Todos os tipos de ponto de extremidade | Somente MQTT, Kafka e OpenTelemetry |
Para novos projetos que usam tipos de ponto de extremidade com suporte, recomendamos grafos de fluxo de dados. Os fluxos de dados permanecem totalmente compatíveis com todos os cenários e dão suporte à gama completa de tipos de ponto de extremidade.
Transformações disponíveis
Cada transformação é uma etapa de processamento pré-construída que você configura com regras e encadeia com outras transformações dentro de um DataflowGraph recurso.
| Transformar | Artefato | Description |
|---|---|---|
| Map | azureiotoperations/graph-dataflow-map:1.0.0 |
Renomear, reestruturar, computar e copiar campos. |
| Filtro | azureiotoperations/graph-dataflow-filter:1.0.0 |
Solte mensagens que correspondam a uma condição. |
| Branch | azureiotoperations/graph-dataflow-branch:1.0.0 |
Encaminhe cada mensagem para um true ou false caminho com base em uma condição. |
| Concatenate | azureiotoperations/graph-dataflow-concatenate:1.0.0 |
Mescle dois ou mais caminhos em um só. |
| Janela | azureiotoperations/graph-dataflow-window:1.0.0 |
Colete mensagens em um intervalo de tempo e, em seguida, agregar. |
| Throttle | azureiotoperations/graph-dataflow-throttle:1.0.0 |
Limite a taxa de mensagens por padrão de tópico do MQTT. |
Todas as transformações compartilham uma linguagem de expressão para operadores, funções e referências de campo. Você também pode enriquecer mensagens com dados externos de um repositório de estado em transformações de mapa, filtro e ramificação.
Dica
As expressões usam variáveis posicionais, então $1 é a primeira entrada, $2 é a segunda, e assim por diante. A referência Expressões lista funções embutidas como cToF e cobre todos os operadores, funções e campos de metadados disponíveis para transformações.
Como as transformações se compõem em um gráfico de fluxo de dados
Transformações se conectam em sequência dentro de um DataflowGraph recurso: Fonte > Transformação A > Transformação B > ... > Destino.
As transformações de ramificação dividem o fluxo em caminhos paralelos, e as transformações de concatenação os unem novamente.
Você pode encadear qualquer número de transformações em qualquer ordem. Um pipeline com uma única transformação de mapeamento é tão válido quanto um que filtra, ramifica, mapeia cada caminho de maneira diferente, mescla e, em seguida, agrega em uma janela de tempo.
Como funciona a configuração de grafos de fluxo de dados
Cada transformação em um gráfico de fluxo de dados faz referência a um artefato pré-construído extraído de um registro de contêiner. Configure a transformação passando regras como JSON na seção configuration do recurso gráfico.
Quando você implanta o Operações do Azure IoT, ele cria automaticamente um endpoint padrão de registro chamado default que aponta para mcr.microsoft.com. As transformações integradas utilizam este ponto de extremidade para baixar artefatos do Registro de Contêiner da Microsoft. Você não precisa de nenhuma configuração extra de registro.
Um recurso de grafo de fluxo de dados define três tipos de elementos — uma fonte, uma ou mais transformações (cada uma com nodeType: Graph), e um destino — e um conjunto desses nodeConnections que descrevem como os dados fluem entre eles. Cada transformação configuration passa suas regras como uma string JSON sob a rules tonalidade.
Para um exemplo completo e executável que lê dados de temperatura, converte Celsius para Fahrenheit com uma transformação de mapa e publica o resultado — na experiência de Operações, CLI do Azure, Bicep e Kubernetes — veja Criar um gráfico de fluxo de dados. Nos artigos de instruções a seguir, os exemplos se concentram nas próprias regras de transformação.
Configurar esquemas em conexões de nós
Grafos de fluxo de dados lidam com esquemas de forma diferente dos fluxos de dados. Em vez de definir o esquema na origem ou transformação, você configura esquemas nas conexões de nó entre nós no gráfico. Transformações de desvio e filtro podem opcionalmente validar dados em tempo de execução contra esquemas conectados a conexões de nós.
Cada entrada no nodeConnections array pode incluir um schema no from lado de uma conexão. Este esquema descreve o formato esperado dos dados que fluem entre esses dois nós:
nodeConnections: [
{
from: {
name: 'source'
schema: {
schemaRef: 'aio-sr://my-namespace/sensor-data:1'
serializationFormat: 'Json'
}
}
to: {
name: 'transform'
}
}
]
O schemaRef valor usa o formato aio-sr://<namespace>/<name>:<version> e aponta para um esquema armazenado no registro do esquema. Como grafos de fluxo de dados suportam apenas endpoints MQTT, Kafka e OpenTelemetry, o formato de serialização suportado é Json.
A tabela a seguir resume como a configuração do esquema difere entre fluxos de dados e grafos de fluxo de dados:
| Aspeto | Fluxos de dados | Gráficos de fluxo de dados |
|---|---|---|
| Local do esquema | Na origem (sourceSettings.schemaRef) e na transformação (builtInTransformationSettings.schemaRef) |
Em conexões de nó (nodeConnections[].from.schema) |
| Formatos de destino com suporte | JSON, Parquet, Delta | JSON |
| Validação em tempo de execução | Não suportado para esquemas de origem | Opcional em conexões de nós por meio de transformações de ramificação e filtro |
Note
Para grafos de fluxo de dados, JSON é atualmente o único formato de destino suportado, apesar dos formatos listados na documentação de referência da API REST.
Para definições de esquemas de mensagens, formatos e como enviar esquemas, veja Compreender esquemas de mensagens.
Transformações integradas vs. transformações WASM
Os grafos de fluxo de dados dão suporte a dois tipos de transformações:
- As transformações internas são predefinidas pela Microsoft (mapear, filtrar, ramificar, concatenar, expor, restringir). Configure-os com regras. Não é necessário codificar.
- As transformações de WASM são módulos webAssembly personalizados que os desenvolvedores criam e implantam. Use-as quando precisar de lógica que as transformações internas não abrangem.
Ambos os tipos de transformadas rodam dentro do mesmo DataflowGraph recurso, e você pode misturá-las em um único pipeline. Para obter informações sobre como criar e implantar transformações personalizadas, consulte Usar transformações WASM em grafos de fluxo de dados.
Tratamento de erros em grafos de fluxo de dados
Quando uma transformada encontra um erro ao processar uma mensagem (por exemplo, um campo faltando ou uma expressão inválida), a transformação deixa a mensagem cair e registra um erro. O pipeline continua processando mensagens subsequentes.
Causas comuns de erros de processamento:
- Um campo referenciado em uma regra
inputsnão existe na mensagem. - Uma expressão de filtro ou branch retorna um valor não booliano.
- Uma expressão faz referência a um tipo de dado incompatível (por exemplo, um objeto JSON na aritmética).
- Um armazém estatal utilizado para enriquecimento é inacessível.
Para monitorar erros de processamento, verifique os logs do pod do gráfico de fluxo de dados ou utilize os pontos de extremidade de métricas. Para obter mais informações, consulte Configurar a observabilidade e o monitoramento.
Limitação de escalabilidade para grafos com estado
Importante
As transformadas de janela e de acelerador são com estado. Cada instância mantém seu próprio estado e as instâncias não compartilham esse estado entre si. Quando a contagem de instâncias do perfil de fluxo de dados é maior que uma, assinaturas compartilhadas distribuem mensagens entre instâncias, de modo que cada instância vê apenas um subconjunto das mensagens. Uma transformada de janela então calcula agregações como médias, somas e contagens sobre um conjunto de dados parcial, e uma transformada de aceleração impõe o limite de taxa configurado independentemente em cada instância, em vez de em todo o pipeline.
Defina a contagem de instâncias do perfil de fluxo de dados para 1 para qualquer grafo de fluxo de dados que use uma transformação de janela ou de aceleração. Grafos de fluxo de dados sem estado que usam apenas transformadas de mapeamento, filtro, desvio e concatenação podem usar com segurança contagens maiores de instâncias para aumentar a taxa de transferência.
Orientação de desempenho para gráficos de fluxo de dados
Cada transformação no pipeline adiciona sobrecarga de processamento. Tenha estas diretrizes em mente:
- Prefira menos transformações com mais regras. Se você tiver muitas regras de transformação que operam na mesma estrutura, coloque-as em uma única transformação de mapa em vez de criar transformações separadas para cada regra.
- Use várias transformações quando houver uma lógica distinta. Transformações separadas fazem sentido quando diferentes etapas de processamento são fundamentalmente diferentes (filtragem versus mapeamento versus agregação).
- Mantenha as regras relacionadas juntas. Uma única transformação de mapa pode lidar com transformações de renomeação de campo, reestruturação, campos computados e metadados de uma só vez.
Conteúdo relacionado
- Fluxos de dados versus grafos de fluxo de dados
- Criar um grafo de fluxo de dados
- Transformar dados com o mapa
- Filtrar e rotear dados
- Agregar dados ao longo do tempo
- Enriquecer com dados externos
- Restringir dados
- Rotear mensagens para tópicos diferentes
- Referência de expressões
- Usar transformações de WASM em grafos de fluxo de dados