---
title: 数据对齐
description: "了解数据对齐之前，需要先了解什么是数据对。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/dfdevp_23_0026.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/dfdevp_23_0026.html
indexId: 9a7b4bfd8f7a54522508f71bb2fdba400eb7695b07f742c65c3e2bc5478c671069
---
# 数据对齐

#### 功能介绍

了解数据对齐之前，需要先了解什么是数据对。

图1 数据对示意图

- 定义Model X为数据最早的来源，输出有两个队列，输出的多组数据[A1',B1']、[A2',B2']、[A3',B3']，每组数据是有关联的。
- 定义Model A和Model B为数据处理节点，多实例部署在多张卡上，Model A负责处理数据流A'，Model B负责处理数据流B'，由于是多实例部署，处理完之后会乱序，无法按照Model X输出的原始顺序输出。
- 定义Model C为数据汇聚节点，从数据流A和数据流B中一组一组地取数据进行处理，必须[A1, B1],[A2, B2],[A3, B3]这样的配对关系才能正常处理。

数据对齐是指UDF节点要求输入数据是数据对。

按照示意图的数据流，如果不做数据配对，按照框架默认的接收顺序，Model C收到的数据顺序是[A3, B2],[A2, B1],[A1, B3]。由于数据混乱，无法直接处理的，UDF节点收到[A3, B2]之后需要自己先缓存，然后等待收到[A2, B1]后，才可以正常处理[A2, B2]。收到[A1, B3]之后，才能处理[A1, B1]和[A3, B3]。


#### 使用约束

框架数据对齐依赖transId和dataLabel作为判断对齐依据，如果一个数据分发给不同的实例，由于处理时序的差异，数据流到达下个节点顺序不保序，导致无法保证配对。


#### 使用方法

```
dag = df.FlowGraph([flow_node_out])
dag.set_inputs_align_attrs(align_max_cache_num=256, align_timeout=60 * 1000, dropout_when_not_align=True) # 最大缓存256组数据，如果超时时间1分钟，则丢弃超时未对齐数据
```
