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

相关推荐
starzy19902 天前
Flink Sliding Window 详解及代码实现:从窗口重叠到状态爆炸防控
运维·数据库·flink
Gl�ria2 天前
Yarn NM 常驻Flink任务下线:stop/savepoint 释放容器
flink·yarn
TLA技术2 天前
LogMiner vs 裸日志解析(三):Oracle日志解析中的“前镜像”和“后镜像”,到底怎么用?
数据库·oracle·flink·dba·迁移学习
starzy19902 天前
Flink Session Window 详解及代码实现:从用户会话切割到窗口合并机制
java·flink
starzy19904 天前
Flink Window 详解及代码实现:从滚动窗口到迟到数据处理
大数据·flink
Thomas21434 天前
flink pekko OversizedPayloadException 异常排查记录
flink
平顶山大师5 天前
datalink下载安装
flink·微软
用户3610588626125 天前
从 chroot 到 LXC:四代容器隔离技术演进,Namespace 与 Cgroups 原理拆解
大数据·flink
Msshu1235 天前
什么是PD快充诱骗取电芯片,PD快充取电芯片如何选型
flink·rabbitmq·ambari·mariadb·storm·talkingdata
用户3610588626127 天前
Flink高级之侧输出流Side Output原理及代码实现:从OutputTag到多流分发
大数据·flink