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

基于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服务

      http://www.xdnf.cn/news/4631.html

      相关文章:

    • springmvc的入门案例
    • npm create vite@latest my-vue-app 解读
    • 前端面经 作用域和作用域链
    • 408考研逐题详解:2009年第10题
    • SQL常用操作大全:复制表、跨库查询、删除重复数据
    • Andorid 文件打印功能
    • React 实现 JWT 登录验证的最小可运行示例
    • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图
    • Ubuntu 服务器管理命令笔记
    • 系统重装之后,通过ssh无法登录
    • 安卓基础(XML)
    • Vue2 中 el-dialog 封装组件属性不生效的深度解析(附 $attrs、inheritAttrs 原理)
    • DApp开发:开启去中心化应用新时代
    • LLaMA模型本地部署全攻略:从零搭建私有化AI助手
    • Algolia - Docsearch的申请配置安装【以踩坑解决版】
    • 2025年渗透测试面试题总结-某步在线面试(题目+回答)
    • 枚举 · 例8扩展-校门外的树:hard
    • 2025年APP安全攻防指南:抵御DDoS与CC攻击的实战策略
    • 神经网络—感知器、多层感知器
    • matlab实现模型预测控制
    • Qt/C++面试【速通笔记八】—Qt的事件处理机制
    • Solidity语言基础:区块链智能合约开发入门指南
    • 软件设计师教程——第一章 计算机系统知识(上)
    • tmux 入门与实用指南
    • 从零开始用 AI 编写一个复杂项目的实践方法论
    • R语言数据挖掘:从“挖井”到“淘金”
    • C31-形参与实参的区别
    • Google 发布 Gemini 2.5 Pro Preview (I/O Edition),具有增强的编程能力
    • 多模态文档检索开源方案-三大竞赛获奖方案技术链路
    • Flink SQL DataStream 融合开发模式与动态配置热加载机制实战