데이터 흐름 그래프를 사용하면 Azure IoT 작업를 통해 이동할 때 데이터를 유연하게 처리할 수 있습니다. 표준 데이터 흐름 은 고정 보강, 필터, 맵 시퀀스를 따릅니다. 데이터 흐름 그래프를 사용하면 순서에 따라 변환을 작성하고, 병렬 경로로 분기하고, 시간 창에 따른 데이터를 집계할 수 있습니다.
데이터 흐름 그래프는 Kubernetes 사용자 지정 리소스에 DataflowGraph 의해 정의됩니다. 내부는 원본, 변환 및 대상을 함께 연결하여 시나리오와 일치하는 처리 파이프라인을 빌드합니다.
중요합니다
데이터 흐름 그래프는 현재 MQTT, Kafka 및 OpenTelemetry 엔드포인트만 지원합니다. 데이터 레이크, Microsoft Fabric OneLake, Azure Data Explorer 및 로컬 스토리지와 같은 다른 엔드포인트 형식은 지원되지 않습니다. 자세한 내용은 알려진 문제참조하세요.
데이터 흐름과 데이터 흐름 그래프 비교
Azure IoT 작업는 파이프라인에서 데이터를 처리하는 두 가지 방법을 제공합니다.
| 역량 | 데이터 흐름 | 데이터 흐름 그래프 |
|---|---|---|
| 파이프라인 셰이프 | 수정됨: 보강, 필터, 맵 | 유연한: 어떤 순서, 분기, 병합 |
| 변환 형식 | 맵, 필터, 확장 | 매핑, 필터링, 분기, 결합, 윈도우, 강화 |
| 시간 기반 집계 | 사용할 수 없음 | 텀블링 윈도우를 활용한 윈도우 변환 |
| 조건부 라우팅 | 사용할 수 없음 | 분기 및 연결 변환 |
| 엔드포인트 지원 | 모든 엔드포인트 유형 | MQTT, Kafka 및 OpenTelemetry만 |
지원되는 엔드포인트 형식을 사용하는 새 프로젝트의 경우 데이터 흐름 그래프를 사용하는 것이 좋습니다. 데이터 흐름은 모든 시나리오에서 완벽하게 지원되며 전체 범위의 엔드포인트 유형을 지원합니다.
사용 가능한 변환
각 변환은 규칙을 사용하여 구성되며, DataflowGraph 리소스 내의 다른 변환들과 연결할 수 있는 미리 빌드된 처리 단계입니다.
| 변화시키다 | 유물 | 설명 |
|---|---|---|
| 지도 | azureiotoperations/graph-dataflow-map:1.0.0 |
필드 이름 바꾸기, 구조 변경, 계산 및 복사. |
| 필터 | azureiotoperations/graph-dataflow-filter:1.0.0 |
조건과 일치하는 메시지를 삭제합니다. |
| 브랜치 | azureiotoperations/graph-dataflow-branch:1.0.0 |
조건에 따라 각 메시지를 경로 true 또는 false 경로로 라우팅합니다. |
| Concatenate | azureiotoperations/graph-dataflow-concatenate:1.0.0 |
둘 이상의 경로를 다시 하나로 병합합니다. |
| 창 | azureiotoperations/graph-dataflow-window:1.0.0 |
시간 간격에 따라 메시지를 수집한 다음 집계합니다. |
모든 변환은 연산자, 함수 및 필드 참조에 대한 식 언어 를 공유합니다. 지도, 필터 및 분기 변환의 상태 저장소에서 외부 데이터로 메시지를 보강 할 수도 있습니다.
변환 작성 방법
변환은 리소스 내에서 DataflowGraph 순서대로 연결됩니다. 원본 > 변환 A > 변환 B > ... > 대상입니다.
분기 변환은 흐름을 병렬 경로로 분할하고 연결 변환을 다시 병합합니다.
원하는 수의 변환을 순서에 따라 연결할 수 있습니다. 단일 맵 변환이 있는 파이프라인은 필터링, 분기, 각 경로를 다르게 매핑하고, 병합한 다음, 시간 창에 걸쳐 집계하는 파이프라인만큼 유효합니다.
구성 작동 방식
데이터 흐름 그래프의 각 변환은 컨테이너 레지스트리에서 가져온 미리 빌드된 아티팩트를 참조합니다. 그래프 리소스의 섹션을 통해 configuration 규칙을 JSON으로 전달하여 변환을 구성합니다.
Azure IoT 작업를 배포할 때 자동으로 만들어지는 이름이 default이고 mcr.microsoft.com을(를) 가리키는 기본 레지스트리 엔드포인트입니다. 기본 제공 변환은 이 엔드포인트를 통해 Microsoft Container Registry에서 아티팩트들을 끌어옵니다. 추가 레지스트리 설정이 필요하지 않습니다.
다음은 MQTT 토픽에서 온도 데이터를 읽고, 지도 변환을 사용하여 섭씨에서 화씨로 변환하고, 결과를 게시하는 전체 예제입니다.
- 작업 환경
- Bicep (인프라 코드 관리 도구)
- Kubernetes(디버그 전용)
작업 환경에서 다음을 수행합니다.
- 데이터 흐름 그래프>데이터 흐름 그래프 만들기를 선택합니다.
- 기본 엔드포인트 및 토픽을 사용하여 원본 을 추가합니다
telemetry/temperature. -
지도 변환을 추가합니다. 입력
temperature, 출력temperature_f및 식을cToF($1)사용하여 규칙을 구성합니다. - 기본 엔드포인트와 주제 을 사용하여
telemetry/converted을 추가하세요. - 연결: 원본 → 지도 → 대상
- 저장을 선택합니다.
파이프라인은 소스, 변환(표시됨 nodeType: Graph) 및 대상의 세 가지 요소를 정의합니다. 연결은 데이터 흐름 방식을 설명합니다. 변환 configuration 은 키 아래에 rules JSON 문자열로 규칙을 전달합니다.
다음 방법 문서에서 예제는 변환 규칙 자체에 초점을 맞춥니다. 데이터 흐름 그래프를 만드는 단계별 가이드는 데이터 흐름 그래프 만들기를 참조하세요.
기본 제공 변환 대 WASM 변환
데이터 흐름 그래프는 다음 두 가지 종류의 변환을 지원합니다.
- 기본 제공 변환 은 Microsoft에서 미리 빌드합니다(지도, 필터, 분기, 연결, 창). 규칙을 사용하여 구성합니다. 코딩이 필요하지 않습니다.
- WASM 변환은 개발자가 빌드하고 배포하는 사용자 지정 WebAssembly 모듈입니다. 기본 제공 변환에서 다루지 않는 논리가 필요할 때 사용합니다.
두 종류의 변환은 동일한 DataflowGraph 리소스 내에서 실행되며 단일 파이프라인에서 혼합될 수 있습니다. 사용자 지정 변환을 빌드하고 배포하는 방법에 대한 자세한 내용은 데이터 흐름 그래프에서 WASM 변환 사용을 참조하세요.
오류 처리
메시지(예: 누락된 필드 또는 잘못된 식)를 처리하는 동안 변환에 오류가 발생하면 메시지가 삭제되고 오류가 기록됩니다. 파이프라인은 후속 메시지를 계속 처리합니다.
오류 처리의 일반적인 원인:
- 규칙에 참조된 필드가
inputs메시지에 없습니다. - 필터 또는 분기 표현식이 부울 값이 아닌 값을 반환합니다.
- 식은 호환되지 않는 데이터 형식을 참조합니다(예: 산술 연산에서 JSON 개체 사용).
- 보강에 사용되는 상태 저장소에 연결할 수 없습니다.
처리 오류를 모니터링하려면 데이터 흐름 그래프에 대한 Pod 로그를 확인하거나 메트릭 엔드포인트를 사용합니다. 자세한 내용은 관찰 가능성 및 모니터링 구성을 참조하세요.
상태 저장 그래프의 크기 조정 제한
창과 같은 상태 저장 변환을 포함하는 데이터 흐름 그래프는 데이터 흐름 프로필 인스턴스 수를1로 실행해야 합니다. 인스턴스 수가 1보다 크면 들어오는 메시지가 공유 구독을 통해 인스턴스 간에 분산됩니다. 각 인스턴스는 자체 집계 상태를 유지하고 인스턴스는 서로 상태를 통신하지 않으므로 각 인스턴스는 메시지의 일부만 볼 수 있습니다. 이로 인해 평균, 합계 및 개수와 같은 집계 결과가 불완전한 데이터에 대해 계산됩니다.
상태 비저장 데이터 흐름 그래프(즉, map, filter, branch 및 concat 변환만 사용하는 그래프)는 처리량을 늘리기 위해 더 많은 인스턴스를 안전하게 사용할 수 있습니다.
성능 지침
파이프라인의 각 변환은 처리 오버헤드를 추가합니다. 다음 지침에 유의하세요.
- 더 많은 규칙을 사용하여 더 적은 변환을 선호합니다. 동일한 구조에서 작동하는 많은 변환 규칙이 있는 경우 각 규칙에 대해 별도의 변환을 만드는 대신 단일 맵 변환에 배치합니다.
- 논리가 고유할 때 여러 변환을 사용합니다. 서로 다른 처리 단계가 근본적으로 다른 경우(필터링 및 매핑 및 집계) 별도의 변환이 의미가 있습니다.
- 관련된 규칙을 함께 모아두세요. 단일 맵 변환은 필드 이름 바꾸기, 재구성, 계산 필드 및 메타데이터 변환을 한 번에 처리할 수 있습니다.