Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um grafo de fluxo de dados é um pipeline configurável que processa os dados à medida que se movem pelo Operações IoT do Azure. 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 temporais.
O DataflowGraph recurso personalizado Kubernetes define um grafo de fluxo de dados. Dentro do recurso, liga-se fontes, transformações e destinos para construir pipelines de processamento que correspondam ao seu cenário.
Importante
Atualmente, os grafos de fluxo de dados suportam apenas os endpoints MQTT, Kafka e OpenTelemetry. Outros tipos de endpoints como Data Lake, Microsoft Fabric OneLake, Azure Data Explorer e Local Storage não são suportados.
Fluxos de dados vs. gráficos de fluxo de dados
O Operações IoT do Azure oferece duas formas de processar dados num pipeline:
| Capacidade | Fluxos de dados | Grafos de fluxo de dados |
|---|---|---|
| Forma do oleoduto | Corrigido: enriquecer, filtrar, mapear | Flexível: qualquer ordem, ramificação, fusão |
| Tipos de transformação | Mapear, filtrar, enriquecer | Mapear, filtrar, ramificar, concatenar, agrupar em janelas, limitar, enriquecer |
| Agregação baseada no tempo | Não disponível | Transformações de janelas com janelas deslizantes |
| Encaminhamento condicional | Não disponível | Transformações de ramificação e concatenação |
| Suporte a endpoints | Todos os tipos de endpoints | Apenas MQTT, Kafka e OpenTelemetry |
Para novos projetos que utilizam tipos de endpoint suportados, recomendamos grafos de fluxo de dados. Os fluxos de dados continuam totalmente suportados para todos os cenários e suportam toda a gama de tipos de endpoints.
Transformadas disponíveis
Cada transformação é um passo de processamento pré-construído que configuras com regras e encadeia com outras transformações dentro de um DataflowGraph recurso.
| Transformar | Artifact | Description |
|---|---|---|
| Mapa | azureiotoperations/graph-dataflow-map:1.0.0 |
Renomear, reestruturar, calcular e copiar campos. |
| Filtro | azureiotoperations/graph-dataflow-filter:1.0.0 |
Descartar mensagens que correspondam a uma condição. |
| Filial | azureiotoperations/graph-dataflow-branch:1.0.0 |
Encaminhe cada mensagem para um caminho true ou false com base numa condição. |
| Concatenate | azureiotoperations/graph-dataflow-concatenate:1.0.0 |
Una dois ou mais caminhos num único caminho. |
| Janela | azureiotoperations/graph-dataflow-window:1.0.0 |
Recolhe mensagens ao longo de um intervalo de tempo e depois agregue. |
| Throttle | azureiotoperations/graph-dataflow-throttle:1.0.0 |
Limite a taxa de mensagens por padrão de tópico MQTT. |
Todas as transformações partilham uma linguagem de expressão para operadores, funções e referências de campo. Também pode enriquecer mensagens com dados externos de uma loja de estados nas transformações de mapa, filtro e ramificação.
Sugestão
As expressões usam variáveis posicionais, por $1 isso é a primeira entrada, $2 é a segunda, e assim sucessivamente. A referência Expressões lista funções incorporadas 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 num grafo de fluxo de dados
As transformações ligam-se em sequência dentro de um DataflowGraph recurso: Fonte > Transform A > Transform B > ... > Destino.
As transformações de ramificação dividem o fluxo em caminhos paralelos, e as transformações de concatenação unem-nos novamente.
Podes encadear qualquer número de transformações em qualquer ordem. Um pipeline com uma única transformação de mapa é tão válido quanto um que filtra, ramifica, mapeia cada caminho de forma diferente, funde e depois agrega ao longo de uma janela temporal.
Como funciona a configuração do grafo de fluxo de dados
Cada transformação num grafo de fluxo de dados faz referência a um artefacto pré-construído retirado de um registo de contentores. Configuras a transformação passando regras como JSON através da configuration secção do recurso do grafo.
Quando implementa o Operações IoT do Azure, ele cria automaticamente um endpoint de registo predefinido chamado default que aponta para mcr.microsoft.com. As transformações incorporadas usam este endpoint para extrair artefactos do Microsoft Container Registry. Não precisas de nenhuma configuração extra de registo.
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 as suas regras como uma string JSON sob a rules tonalidade.
Para um exemplo completo e executável que lê dados de temperatura, converte Celsius em 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 práticos que se seguem, os exemplos focam-se nas próprias regras de transformação.
Configurar esquemas em ligações de nós
Os grafos de fluxo de dados lidam com esquemas de forma diferente dos fluxos de dados. Em vez de definir o esquema na fonte ou transformação, configuras esquemas nas ligações dos nós entre nós no grafo. As transformações de ramificação e filtro podem, opcionalmente, validar dados em tempo de execução contra esquemas ligados a ligações de nós.
Cada entrada no nodeConnections array pode incluir um schema no from lado de uma ligaçã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 utiliza o formato aio-sr://<namespace>/<name>:<version> e aponta para um esquema armazenado no registo do esquema. Como os grafos de fluxo de dados suportam apenas os endpoints MQTT, Kafka e OpenTelemetry, o formato de serialização suportado é Json.
A tabela seguinte resume como a configuração do esquema difere entre fluxos de dados e grafos de fluxo de dados:
| Aspect | Fluxos de dados | Grafos de fluxo de dados |
|---|---|---|
| Localização do esquema | Na fonte (sourceSettings.schemaRef) e na transformação (builtInTransformationSettings.schemaRef) |
Nas conexões de nós (nodeConnections[].from.schema) |
| Formatos de destino suportados | JSON, Parquet, Delta | JSON |
| Validação em tempo de execução | Não suportado para esquemas de origem | Opcional nas ligações de nós através de transformações de ramificação e filtro |
Note
Para grafos de fluxo de dados, o 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 carregar esquemas, consulte Compreender esquemas de mensagens.
Transformações incorporadas vs. transformações WASM
Os grafos de fluxo de dados suportam dois tipos de transformadas:
- As transformações integradas são pré-definidas pela Microsoft (map, filter, branch, concatenate, window, throttle). Configura-os com regras. Não é necessário programar.
- As transformações WASM são módulos WebAssembly personalizados que os programadores constroem e implementam. Usa-os quando precisares de lógica que as transformações incorporadas não cobrem.
Ambos os tipos de transformações correm dentro do mesmo DataflowGraph recurso, e podes misturá-las num único pipeline. Para informações sobre a construção e implementação de transformações personalizadas, veja Usar transformações WASM em gráficos de fluxo de dados.
Gestão de erros em grafos de fluxo de dados
Quando uma transformação encontra um erro durante o processamento de uma mensagem (por exemplo, um campo em falta ou uma expressão inválida), a transformação elimina a mensagem e regista um erro. O pipeline continua a processar as mensagens seguintes.
Causas comuns de erros de processamento:
- Um campo referenciado numa regra
inputsnão existe na mensagem. - Uma expressão de filtro ou ramificação devolve um valor não booleano.
- Uma expressão faz referência a um tipo de dado incompatível (por exemplo, um objeto JSON na aritmética).
- Um armazenamento de estado usado para enriquecimento de dados está inacessível.
Para monitorizar erros de processamento, verifique os podlogs do gráfico de fluxo de dados ou use os endpoints das métricas. Para mais informações, consulte Configurar observabilidade e monitorização.
Limitação de escalamento para grafos com estado
Importante
As transformadas de janela e de acelerador são com estado. Cada instância mantém o seu próprio estado e as instâncias não partilham esse estado entre si. Quando o número de instâncias do perfil de fluxo de dados é superior a um, as subscrições partilhadas distribuem mensagens entre instâncias, de modo que cada instância vê apenas um subconjunto das mensagens. Uma transformada de janela calcula então 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 de forma independente 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 utilize uma transformação de janela ou de aceleração. Grafos de fluxo de dados sem estado que utilizam apenas transformadas de mapeamento, filtro, ramificação e concatenação podem usar com segurança contagens de instâncias mais elevadas para aumentar o rendimento.
Orientação de desempenho para grafos de fluxo de dados
Cada transformação no pipeline acrescenta sobrecarga de processamento. Tenha em mente estas orientações:
- Prefiro menos transformações com mais regras. Se tiveres muitas regras de transformação que operam na mesma estrutura, coloca-as numa única transformação de mapa em vez de criares transformações separadas para cada regra.
- Use múltiplas transformações quando a lógica é distinta. Transformações separadas fazem sentido quando diferentes etapas de processamento são fundamentalmente diferentes (filtragem, mapeamento ou agregação).
- Mantenha as regras relacionadas juntas. Uma única transformação de mapa pode gerir renomeação de campos, reestruturação, campos computados e transformações de metadados em simultâneo.
Conteúdo relacionado
- Fluxos de dados vs. gráficos de fluxo de dados
- Criar um grafo de fluxo de dados
- Transformar dados com mapa
- Filtrar e encaminhar dados
- Dados agregados ao longo do tempo
- Enriquecer com dados externos
- Dados de limitação
- Encaminhe mensagens para diferentes tópicos
- Referência de expressões
- Utilizar transformadas WASM em grafos de fluxo de dados