实时流计算结果如何验证结果准确性?

实时数仓模型,常应用在实时营销;实时风控等领域,实时数仓的分层方式一般也遵守传统数据仓库模型,也分为了 ODS 操作数据集、DWD 明细层和 DWS 汇总层以及应用层。但实时数仓模型的处理的方式却和传统数仓有所差别,如明细层和汇总层的数据一般会放在 Kafka 上,维度数据一般考虑...显示全部

实时数仓模型,常应用在实时营销;实时风控等领域,实时数仓的分层方式一般也遵守传统数据仓库模型,也分为了 ODS 操作数据集、DWD 明细层和 DWS 汇总层以及应用层。但实时数仓模型的处理的方式却和传统数仓有所差别,如明细层和汇总层的数据一般会放在 Kafka 上,维度数据一般考虑到性能问题则会放在 HBase 或者 Tair 等 KV 存储上,即席查询则可以使用 Flink 完成。
由于流式计算是无界无序的;如何验证处理结果一致性和准确性相对于有边界的批式处理的数据流结果验证更为麻烦,大家在这块实践中有没有什么好的经验,分享一下?
我们目前主要是从构建多种校验补偿机制,确保数据完整性和准确性。 为了进一步提升实时数据处理的完整性和准确性,引入多种数据补偿机制。一是基于乐观锁版本号,确保高吞吐下的数据准确性。在消息写入分布式数据库时,通过按照版本号进行消息的写入及更新,使得乱序消息的到达不影响数据入库的准确性。二是使用Flink的Checkpoint和两段事务提交机制确保集群异常时数据的准确性。当消息处理出错时,将消息放置到补偿队列或死信队列中,确保出错的消息不丢失、不重复,并可以继续重试处理。三是离线结果数据和实时结果数据相互校验,确保数据完整性。Flink实时数据处理当天T日数据,离线数据处理T-1日数据,每天晚上离线结果数据和实时结果数据进行相互核对,对于差异数据,以离线结果数据为准。

收起
参与9

查看其它 1 个回答guoxilin的回答

guoxilinguoxilin高级非功能测试专家某科技公司

由于实时数仓的数据是无边界的流,相比于离线数仓固定不变的数据更难验收。基于不同的场景,还有的做法提供了 2 种验证方式,分别是:抽样验证与全量验证。
1)抽样验证方案:
该方案主要应用在数据准确性验证上,实时汇总结果是基于存储在 Kafka 的实时明细中间层计算而来,但 Kafka 本身不支持按照特定条件检索,不支持写查询语句,再加上消息的无边界性,统计结果是在不断变化的,很难寻找参照物进行比对。鉴于此,采用了持久化消息的方法,将消息落盘到 TiDB 等存储,基于 TiDB 的能力对落盘的消息进行检索、查询、汇总。编写固定时间边界的测试用例与相同时间边界的业务库数据或者离线数仓数据进行比对。通过以上方式,抽样数据进行指标准确性验证,确保测试用例全部通过。
2)全量验证方案
该方案主要应用在数据完整性和一致性验证上,在实时维度表验证的场景使用最多。大体思路:将存储实时维度表的在线 HBase 集群中的数据同步到离线 HBase 集群中,再将离线 HBase 集群中的数据导入到 Hive 中,在限定实时维度表的时间边界后,通过数据平台提供的数据校验功能,比对实时维度表与离线维度表是否存在差异,最终确保两张表的数据完全一致

互联网服务 · 2023-10-10
浏览540

回答者

guoxilin
高级非功能测试专家某科技公司
擅长领域: 服务器数据库云计算

guoxilin 最近回答过的问题

回答状态

  • 发布时间:2023-10-10
  • 关注会员:2 人
  • 回答浏览:540
  • X社区推广