1. 数据对账
1.1. 概念
数据一致性:数据对账要解决的,是数据同步任务执行一段时间后、源表和目标表数据不一致的问题。
项目经验:
1、来源表的历史数据,必须保留以防止出现问题;
2、来源表必须有主键字段,确保一条数据的唯一性。比如:账单信息表的账单 ID、用户信息表的用户 ID。
1.2. 增量同步
上表新增用户小华、同时李四昵称发生变更。
-
插入更新:
-
拉链维护:
1.3. 全量同步
- 不需要考虑数据对账问题;
- 全量同步,只会在第一次【初始化】、以及同步【对账表】的时候才会应用到。
2. 数据不一致的原因
2.1. 来源表物理删除
-
异常结果:来源表数据量比目标表少。
-
解决办法:【逻辑删除】维护数据状态标识,进行逻辑删除。比如:数据状态:值为 1 表示可用,值为 0 表示不可用。
2.2. 历史数据更新未同步更新增量字段
- 异常结果:相同主键数据内容不一致。
- 比如:数据有变动,却未修改更新时间,导致增量同步时、无法感知数据变化,出现相同主键数据内容不一致。
- 解决办法:【增量字段】随数据变化及时更新。
2.3. 增量字段不规范
- 异常结果:相同主键数据内容不一致。
- 比如:数据有变动,但更新时间未能正常修改,导致增量同步时、无法感知数据变化,出现相同主键数据内容不一致。
- 解决办法:【增量字段】需要符合规范。
2.5. 增量字段不合理
- 异常结果:来源表数据比目标表多,相同主键数据内容不一致。
- 比如:增量字段设置为用户注册时间,但注册后需要时间审核,而审核时间不可控,数据同步记录的偏移量是最近时间,但是在审核这段时间可能还会有新的账号注册,这就会导致数据不一致问题。
- 解决办法:选择正确的增量字段。
2.6. 任务异常
- 异常结果:来源表数据比目标表多,相同主键数据内容不一致。
- 比如:某一天任务运行失败,导致数据未能同步,之后又未能及时补录,导致数据不一致。
- 解决办法:异常重试机制、任务监控、及时补录数据。
3. 数据对账策略
3.1. 目标表公共字段
- 入库时间
- 记录创建时间;
- 更新时间
- 作为【增量字段】,用于判断那些数据近期有更新;
- 业务数据 MD5 值
- 用于判断该条数据全部字段值、是否有变动。
3.2. 对账表
- 对账表内容:
- 业务表主键字段,一般为 ID;
- 业务表增量字段,一般为 最后更新时间;
- 业务表记录全字段 MD5 值;
- 全量同步对账表
- 对账表需要采用全量同步,才能保证对账的准确性。
注意:对账表字段少,数据量小,同步的速度快,资源占用小,所以可以进行全量同步。
- 对账表需要采用全量同步,才能保证对账的准确性。
- 对账表作用
- 通过将目标表和对账表进行联合分析,对标差异,进而排查数据差异。
3.3. 数据同步初始化
- 数据同步初始化,也就是第一次同步时、需要全量同步所有历史数据;
首次全量同步,记录数据偏移量(上次同步位置,即最新的同步位置)。
注意:信息入库时间和信息更新时间,实际上是不一致的,最好全部记录下来。
3.4. 对账分析内容
- 数据量一致性:
- 目标表是否存在数据缺失;
- 数据内容一致性:
- 目标表数据未及时更新;
3.5. 对账周期
- 根据业务实际,决定多久进行一次对账表的全量同步;
- 不同量级、不同类型的数据,可以按不同周期进行对账;
3.6. 注意事项
- 当数据量达到百亿、千亿级别时,全量同步对账表会非常考验系统性能;
- 需要根据业务实际,分析是否有必要针对全部历史数据、全量同步对账表;
- 实际工作中,需要根据业务实际,进行分级、分类处理。