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

相关推荐
Flink_China14 小时前
Flink OSS CDC: 让AI多模态数据处理实时化
flink
放学-别走20 小时前
flink和kafka常见面试题
大数据·flink·kafka
阿里云大数据AI技术1 天前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
空杆推不起3 天前
穿透 Flink CDC 表层用法:数据库日志捕获机制、Flink Source 运行时、端到端一致性底层原理详解
大数据·数据库·flink
tian_jiangnan6 天前
Flink 流计算进阶:手写一套通用的 Redis/MySQL /Kafka数据源封装工具类
redis·mysql·flink
abcy07121310 天前
flink datastream调用8种分区策略实例
flink
yqj23412 天前
Flink集群配置与部署全攻略
大数据·flink
abcy07121312 天前
spark核心组件
flink·spark
Apache Flink12 天前
全模态入湖,把大模型接入实时湖仓:Flink OSS CDC + DLF Paimon 实现零代码以图搜图
大数据·flink
翔云12345614 天前
Kafka + Flink实时时流处理场景
flink·kafka