使用Flink批处理完成数据比对(对账)三

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Flink批处理完成数据比对(对账)三相关的知识,希望对你有一定的参考价值。

参考技术A 前面的文章 使用Flink批处理完成数据比对(对账)二 讨论了使用Table API来处理数据比对的问题,但有些场景下还会有一些比较复杂的业务需求,如输出的时候要将两边的数据合并在一起输出,这个时候用Table API就不太好完成这样的需求了,这就需要借助底层的DataSet API和Process Function。

这篇文章准备利用DataSet API来完成数据比对的需求,至于流数据的实时比对,下一篇文章将介绍。

核心的思想就是用两个流(DataSet其实也是一种特殊的DataStream)中的数据进行处理,Flink中就具备这样的API。

通过 coGroup 、 where 和 equalTo 很容易讲两个流中orderNo相同的数据关联在一起, coGroup 和 join 不同, join 只会关联key相同的数据,形成一个数据集。而 coGroup 遇到指定key只有一个数据集中有记录的情况时,会将这个Group和空的Group关联。

源码

可以看到,利用Flink将两方数据关联是非常容易的。笔者在实际业务场景中,有些需求不仅需要关联两方数据的,在下发回盘文件的时候,还要关联上其他方数据的情况(如商户数据),这种情况目前想到的办法有:

以上是关于使用Flink批处理完成数据比对(对账)三的主要内容,如果未能解决你的问题,请参考以下文章

Flink / Scala - TimeWindow 处理迟到数据详解

一篇谈Flink不错的文章

Hive Read & Write Flink

Flink高手之路:Flink流批一体API开发

大数据之使用Flink处理Kafka中的数据到Redis

资金对账系统的设计思考