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

相关推荐
Thomas214315 小时前
flink paimon 参数 ignore_progress=true
大数据·flink
源图客21 小时前
Apache Flink 2.3.0(最新版本)
大数据·flink·apache
abigalexy2 天前
Flink核心疑难问题、踩坑盲点-汇总
大数据·flink·big data·bigdata
Sayai2 天前
Kafka 跨数据中心日志同步实战:MirrorMaker 2 选型对比 + Flink 中继任务落地(双中心互备与消费者组隔离避坑)
大数据·运维·分布式·flink·kafka·消息队列·高可用
渣渣盟3 天前
Flink 状态管理深度剖析:从 KeyedState 到 RocksDB,状态如何存储、恢复与扩缩容
android·大数据·flink
@小匠4 天前
Flink + Iceberg 批量失败复盘:一次超时如何变成 Hive Metastore 锁泄漏
大数据·hive·flink
Sayai4 天前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算
渣渣盟4 天前
Flink SQL 流批一体:从 SQL 到执行计划,优化器如何工作?
大数据·sql·flink
Flynn Liang7 天前
物联网时序数据乱序问题全链路治理:从设备到存储的五层实战(附 Flink/Kafka/IoTDB 配置级代码)
flink·kafka·iot·iotdb·emqx·乱序·时序数据
欢醉7 天前
Flink实时同步Oracle到StarRocks的几个踩坑经验分享
starrocks·oracle·flink