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