基于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开销

      |-------------------------|------------------------------------------------|
      | 原rowkey | hash化后的rowkey |
      | 506573390_1474947840000 | ffcbf35613ec83d2ad15ea08576ec496_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服务

相关推荐
斯普润布特6 小时前
StreamX(StreamPark 2.1.7) 更改人大金仓KES数据存储-Docker 版
docker·flink·iot
晴天彩虹雨8 小时前
大厂 Flink 面试 100 题
大数据·面试·flink
juniperhan8 小时前
Flink 系列第25篇:Flink SQL 集成 Hive 实践:流批一体下的实时数仓利器
大数据·数据仓库·hive·分布式·sql·flink
大大大大晴天8 小时前
为什么你的Flink SQL结果总不对?回撤流(Retract Stream)机制全解析
flink
斯普润布特8 小时前
Apache Flink 2.1.1与StreamX(StreamPark 2.1.7) 整合
flink·iot
Volunteer Technology1 天前
集群基础环境搭建(二)
大数据·flink·apache
zhojiew1 天前
使用Debezium读取CDC事件并通过Flink任务写入Paimon表来构建实时数据管道的实践
大数据·flink
岳麓丹枫0011 天前
PostgreSQL 15.7 CDC → Flink → Kafka 操作笔记
postgresql·flink·kafka
zhojiew1 天前
使用Flink分析用户Clickstream数据并构建可视化面板的数据管道实践
大数据·flink
howard20052 天前
5.1 初探大数据流式处理
flink·storm·spark streaming·大数据流式处理