实战:实时数仓如何在Flink的state中做维度关联

业务场景

我的实时订单流想要关联另一个流的维度数据,我们该如何设计。

•A流:订单流,从binlog中获取下单数据,缺点是,表内维度数据缺少经纬度信息(举例)。•B流:用户流量信息,保存用户的经纬度信息(举例)

以上场景,是我们在实时数据仓库开发中,会经常遇到实时关联维度数据的情况,我们该如何优雅的开发?

通过唯一key做实时流关联,然后通过union把两个流做合并,通过flink的state做维度补全。

注意事项

•state保存多久,类型设计,上游异常如何回溯历史数据?•什么条件下满足数据输出?,如何解决数据先到和后到问题?•为什么用state做,而不是把维度数据落到redis内存kv中?优点是什么?缺点是什么?•这种设计适合的业务场景是什么?搞清楚。注意⚠️咱们设计的输出触发条件是:“当设备id补全维度数据后再输出结果”。

简化代码

    第一步:两个流处理完之后,并针对每个流添加tag("order_stream","lat_lon_stream")标签,方便两个流进行  union之后去识别哪个是订单流,其中key是deviceid,value是对应的json

val text =order_stream.union(lat_lon_stream).keyBy(0).process(new MyKeyedProcessFunction())

猜你喜欢

转载自blog.csdn.net/huzechen/article/details/104726193
今日推荐