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

相关推荐
从头再来的码农2 天前
大数据Flink相关面试题(一)
大数据·flink
MarkHD2 天前
第四天 从CAN总线到Spark/Flink实时处理
大数据·flink·spark
SparkSql2 天前
FlinkCDC采集MySQL8.4报错
大数据·flink
james的分享2 天前
Flink之Table API
flink·table api
涤生大数据3 天前
带你玩转 Flink TumblingWindow:从理论到代码的深度探索
flink·理论·代码·tumblingwindow
Apache Flink4 天前
网易游戏 Flink 云原生实践
游戏·云原生·flink
SunTecTec5 天前
SQL Server To Paimon Demo by Flink standalone cluster mode
java·大数据·flink
工作中的程序员5 天前
flink监控指标
flink
小马爱打代码5 天前
SpringBoot整合Kafka、Flink实现流式处理
spring boot·flink·kafka