当前位置: 首页 > news >正文

基于Flink的用户画像 OLAP 实时数仓统计分析

1.基于Flink的用户画像 OLAP 实时数仓统计分析

  • 数据源是来自业务系统的T日数据,利用kakfa进行同步

  • 拼接多个事实表形成大宽表,优化多流Join方式,抽取主键和外键形成主外键前置层,抽取外键和其余内容形成融合层,将4次事实表关联优化称为1次关联,减轻shuffle带来的网络传输,降低延迟和关联state的存储压力

  • 维表采用hbase,存储时采用hash打散rowkey,写入预分区中

      HBase的默认RowKey设计可能导致数据集中在单一Region,易因RowKey分布不均导致RegionServer热点问题。通过散列算法(如MD5、SHA1或简单取模)为RowKey添加固定长度前缀,将数据均匀分散到不同Region中。 具体步骤:

      优化效果

    • 散列前缀生成:例如,对用户ID取哈希值并取模(hash(user_id) % N),生成固定长度的前缀(如00|01|)。

    • 预分区设计:根据散列范围预建Region,例如使用HexStringSplit或自定义分区策略(如SPLITS => ['0|','1|','2|',...]),确保数据均匀分布

    • RowKey拼接:将散列前缀与原始RowKey拼接(如hash_prefix + original_rowkey),写入HBase时自动路由到目标Region。

    • 避免单一Region的写入/查询热点,提升并发吞吐量。

    • 结合预分区减少Region Split频率,降低I/O开销

      原rowkeyhash化后的rowkey
      506573390_1474947840000ffcbf35613ec83d2ad15ea08576ec496_1474947840000
    • flink读取时只需要将截取后半段和rowkey关联就行

    • 根据用户交易、评价等行为分析用户画像,定义flinkcep模式,计算用户风险等级

       

      SELECT * FROM daily_metrics MATCH_RECOGNIZE ( PARTITION BY user_id ORDER BY window_start MEASURES SUM(A.daily_failed_trans) AS total_failed, SUM(B.daily_high_payment) AS total_high_payment, LAST(C.daily_negative_review) AS last_negative_review, CASE WHEN SUM(A.daily_failed_trans) >=1 AND SUM(B.daily_high_payment) >=1 AND LAST(C.daily_negative_review) >=1 THEN 'HIGH' ELSE 'LOW' END AS risk_level PATTERN (A+ B+ C) WITHIN INTERVAL '7' DAY -- 7天内模式匹配 DEFINE A AS daily_failed_trans >= 1, -- 至少1次失败交易 B AS daily_high_payment >= 1, -- 至少1次大额支付(金额>1万) C AS daily_negative_review >= 1 -- 至少1次差评(评分≤2) );

      模式详解

      • A+:匹配连续多日(≥1天)的失败交易

      • B+:匹配连续多日(≥1天)的大额支付

      • C:匹配最后1次差评事件

      • WITHIN限制整体时间窗口为7天

      • 高风险用户写入redis中,提供接口供风控单位调用,全量用户写入doris,上层利用BI可视化工具提供OLAP服务

      相关文章:

    • Android NDK版本迭代与FFmpeg交叉编译完全指南
    • CTF - PWN之ORW记录
    • 手写 vue 源码 ===:自定义调度器、递归调用规避与深度代理
    • 【Linux】socket网络编程之UDP
    • 主场景 工具栏 植物卡牌的渲染
    • 使用adb设置wifi相关
    • 《100天精通Python——基础篇 2025 第16天:异常处理与调试机制详解》
    • SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用
    • LeetCode 热题 100 131. 分割回文串
    • 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
    • 湖北理元理律师事务所:债务优化中的“生活保障”方法论
    • 软件逆向工程核心技术:脱壳原理与实战分析
    • 前端开发中移动端调试的日常工具整理
    • 《React Native性能优化:从卡顿到丝滑的蜕变之旅》
    • 信创生态核心技术栈:数据库与中间件
    • Vue 3.0中Treeshaking特性
    • 迪士尼机器人BD-X 概况
    • # 如何使用 PyQt5 创建一个简单的警报器控制界面
    • Chroma:一个开源的8.9B文生图模型
    • 【LunarVim】CMake LSP配置
    • 巴基斯坦关闭全部领空
    • 5月12日至13日北京禁飞“低慢小”航空器
    • 首批18位!苏联籍抗日航空英烈信息更新
    • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
    • 世界银行最新营商环境体检单:59个测评点,上海22项达全球最优水平
    • 云南昆磨高速发生交通事故致3辆车起火,昆明消防:幸无人员伤亡