概述
数据对账用于在来源端与目标端之间周期性比对数据,及时发现数据不一致问题。DataBuddy 实时同步任务支持基于 数据条数 与 数据内容(主键) 的两种对账规则,覆盖全量与增量两种范围,并提供告警通知与差异详情查看。本文介绍数据对账的支持范围、配置方式与结果查看。
前提条件
已创建实时整库或实时分库分表同步任务。
来源、目标端在 支持的链路 范围内。
如使用「校验数据内容」规则,源表必须包含主键或唯一索引。
使用限制
限制项 | 说明 |
任务类型 | 实时整库迁移任务 / 实时分库分表任务支持 |
主键 | 「校验数据内容」仅支持基于主键的对账,无主键且无唯一索引的表不支持 |
MongoDB | MongoDB 来源端不支持增量对账 (仅支持全量对账) |
单任务库表数量 | 任务涉及库表数量超过 5000 时,无法按单表配置数据对账(不影响整体同步任务运行) |
对账周期 | 最小对账间隔为 60 分钟 |
差异详情预览 | 单次最多预览 10000 条差异数据,且仅展示主键字段 |
资源占用 | 对账任务与同步任务复用同一计算资源 ,会占用资源组资源 |
目标端筛选条件 | 增量对账的筛选 SQL 在 Flink SQL 中执行,仅支持 Flink SQL 语法(如当前日期写作 ${YYYY-MM-dd} 而不是 CURRENT_DATE(),不等于使用 <> 而不是 !=) |
支持的链路
任务类型 | 来源端 |
整库迁移任务 | MySQL、TDSQL-C MySQL、Oracle、MongoDB、Kafka |
分库分表任务 | MySQL、TDSQL-C MySQL、Oracle |
操作步骤
步骤 1:开启数据对账
数据对账在任务配置流程的 数据对账 步骤中配置:
1. 在 实时整库多表任务配置 或 实时分库分表任务配置 流程中进入 数据对账 步骤。
2. 打开 数据对账 开关。关闭时所有表都不进行对账;开启后按全局对账策略统一对账。
步骤 2:配置全局对账策略
参数 | 说明 | 是否必填 |
对账规则 | 校验数据条数 / 校验数据内容 ,详见下方说明 | 是 |
对账字段 | 仅在选「校验数据内容」时显示,当前仅支持主键对账 | 视规则 |
对账范围 | 是 | |
对账时间 | 对账周期,最小 60 分钟 | 是 |
对账规则
规则 | 行为 | 适用场景 |
校验数据条数 | 通过数据源连接直接 count(*) 比较来源表与目标表条数 | 数据量不大,关注总量一致 |
校验数据内容 | 比对来源端与目标端的主键集合,主键不一致即认为数据不一致 | 主键稳定且关注每条记录是否落库;要求来源 / 目标端有主键或唯一索引 |
对账范围
范围 | 行为 | 用户输入 |
全量对账 | 对源 / 目标表全量数据对账 | — |
增量对账 | 通过过滤条件筛选后的数据进行对账,适合按时间分区 | 来源端筛选条件 + 目标端筛选条件 |
增量对账提示 :
时间字段筛选支持 系统内置参数。
支持细粒度对账(如按小时分区),可使用分组语法。
来源、目标端筛选条件需各自符合对应数据源的 SQL 语法。
如筛选条件中字段在来源、目标端不存在,需要在「单表对账」中按表修改,否则该表对账会失败。
示例(按小时分区对账):
select count(1), partition from table where partition > ${yyyyMMddHHmmss-8H} group by partition
提示
目标端的筛选 SQL 在 Flink SQL 中执行 ,仅支持 Flink SQL 语法:
当前日期使用
${YYYY-MM-dd} 表达,不要写 CURRENT_DATE() 。不等于使用
<>,不要写 != 。不符合 Flink SQL 语法时,对账会失败。
步骤 3:(可选)按单表自定义对账
全局策略对任务下所有表生效。如需差异化处理:
1. 在配置流程的对账步骤中点击需要差异化的单表。
2. 可单表开启、关闭数据对账,或修改单表的增量对账条件。
提示
单表对账修改在任务发布运行后生效。如某张表需要不同的筛选条件或不参与对账,建议在保存前调整完整。
步骤 4:(可选)配置对账告警
实时同步任务的告警规则页面支持配置数据对账告警。仅对开启了数据对账的任务生效 。
告警指标 | 说明 | 阈值 |
数据对账 / 任务失败 | 数据对账常驻任务运行失败 | 失败时按 X 分钟 / 小时 / 天告警 N 次 |
数据对账 / 对账失败 | 对账明细中某些表为对账失败状态 | 失败时按 X 分钟 / 小时 / 天告警 N 次 |
数据对账 / 对账时间 | 单次数据对账时间超过阈值 | 对账时间 > X 分钟 / 小时 / 天 |
数据对账 / 数据不一致条数 | 对账明细中某些表的数据差异条数不为 0 | 数据不一致条数 > N 条 |
「数据不一致条数」按表粒度 告警——任意一张表的不一致条数超阈值即触发。
查看对账结果
实时同步任务按设置的首次对账时间和对账间隔进行周期持续对账。
入口
对账概览指标
指标 | 说明 |
表总数 | 同步任务涉及的表数量;分库分表场景下按目标端表数量统计 |
数据一致表数量 | 来源 / 目标条数或主键完全一致的表数量 |
数据不一致表数量 | 来源 / 目标存在差异(差异数 ≠ 0)的表数量 |
对账失败数量 | 对账过程中失败的表数量 |
未对账表数量 | 未开启数据对账的表数量 |
对账明细
明细按表逐行展示对账结果。基于主键对账且差异数 ≠ 0 的记录支持 查看差异详情 :
项 | 说明 |
差异详情预览上限 | 10000 条 |
展示字段 | 仅展示主键字段 |
对账任务状态与可执行操作
对账任务是常驻任务,按设置的时间周期自动运行:
状态 | 说明 | 可执行操作 |
对账任务未启动 | 尚未启动 | 运行 |
对账任务运行中 | 正在执行 | 停止 |
对账任务已停止 | 人为停止 | 运行 |
对账任务失败 | 启动失败或运行失败 | 运行 |
对账任务操作中 | 中间态 | — |
验证结果
操作完成后,您可以通过以下方式确认:
1. 在 数据对账 概览看到 表总数 与各分类计数符合预期,未对账表数量 等于未配置对账的表数。
2. 「对账明细」按周期产生新的对账记录。
3. 已配置对账告警时,触发条件下能在告警渠道收到通知。
4. 单表自定义对账配置生效——查看明细时该表的对账规则与全局不同。
常见问题
Q:开启数据对账后会拖慢任务性能吗?
A:会有一定影响。数据对账需要拉取来源端与目标端数据,会对数据源有一定负担 ,并且对账任务与同步任务复用同一计算资源 ,会占用资源组资源。建议:
把对账周期设置得不要过短(最小 60 分钟)。
对大表使用 校验数据条数 ,对中小表再使用 校验数据内容 。
资源组监控值会包含数据对账实例占用,请按实际负载评估资源组规格。
Q:单表对账失败,怎么排查?
A:常见原因:
1. 筛选条件中字段在来源端或目标端不存在 —— 在单表对账配置中调整该表的增量对账条件,使字段名匹配。
2. 目标端筛选 SQL 使用了非 Flink SQL 语法 —— 如
CURRENT_DATE()、!=。改为 ${YYYY-MM-dd}、<>。3. MongoDB 配置了增量对账 —— MongoDB 不支持增量对账,请改为全量对账或在该表关闭对账。
4. 任务涉及库表 > 5000,无法按单表配置 —— 当前规模无法支持单表对账,请拆分为多个任务。
Q:基于主键对账,差异条数为 0 但内容仍可能不一致?
A:是。当前 校验数据内容 仅比对主键集合,不比对其他字段值。如果业务需要比对全字段一致性,建议:
通过数据质量任务增加字段值校验(详见 数据质量)。
或通过 SQL 任务自定义比对脚本(详见 SQL 任务)。
Q:差异详情只显示 10000 条,怎么处理超出部分?
A:差异详情仅用于快速定位差异样本。超出 10000 条 时建议:
1. 通过差异样本判断不一致原因(如 DDL 漏同步、过滤条件遗漏、写入失败等)。
2. 修复同步任务后重新启动一次对账。
3. 如需全量比对,建议另起一个 SQL 任务,将来源、目标主键集合分别落到中间表后做差集。
Q:对账任务能单独停止,不影响数据同步吗?
A:可以。对账任务是常驻任务,可以在 数据对账 单独点击 停止 ,不影响数据同步主任务 。停止后再点击 运行 即可恢复。