基于Flink实时数仓——DWS 层与 DWM 层的设计(3.1)

本文介绍了基于Flink的实时数仓设计思路,特别是DWS层与DWM层的构建。DWM层主要为DWS提供计算服务,减少重复计算,并以主题宽表形式输出指标。文中详细阐述了DWM层中访客UV(独立访客)的计算需求分析和实现,通过keyBy和state来识别和去重每日活跃用户,同时设置了状态的过期时间以控制内存占用。
摘要由CSDN通过智能技术生成

设计思路

  • 在之前通过分流等手段,把数据分拆成了独立的 Kafka Topic。那么接下来如何处 理数据,就要思考一下到底要通过实时计算出哪些指标项。

    因为实时计算与离线不同,实时计算的开发和运维成本都是非常高的,要结合实际情况
    考虑是否有必要像离线数仓一样,建一个大而全的中间层。
    如果没有必要大而全,这时候就需要大体规划一下要实时计算出的指标需求了。把这些
    指标以主题宽表的形式输出就是我们的 DWS 层。
    需求梳理
    在这里插入图片描述
    在这里插入图片描述
    这里主要以为可视化大屏为目的进行实时计算的处理。
    DWM 层的定位是什么,DWM 层主要服务 DWS,因为部分需求直接从 DWD 层到DWS 层中间会有一定的计算量而且这部分计算的结果很有可能被多个 DWS 层主题复用,所以部分 DWD 成会形成一层 DWM,这里主要涉及业务。DWT中保存的历史的数据是累计的结果

DWM 层-访客 UV 计算

需求分析与思路
UV,全称是 Unique Visitor,即独立访客,对于实时计算中,也可以称为 DAU(Daily
Active User),即每日活跃用户,因为实时计算中的 UV 通常是指当日的访客数。
那么如何从用户行为日志中识别出当日的访客,那么有两点:

  1. 是识别出该访客打开的第一个页面,表示这个访客开始进入我们的应用
  2. 由于访客可以在一天中多次进入应用,所以我们要在一天的范围内进行去重

代码实现:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONAware;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.utils.MyKafkaUtil;
import org.apache.flink.api.common.functions.RichFilterFunction;
import org.apache.flink.api.common.state.StateTtlConfig;
import org.apache.flink.api.common.state.ValueState;
import org.apache.flink.api.common.state.ValueStateDescriptor;
import org.apache.flink.api.common.time.Time;
import org.apache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值