2. Flink 基础回顾:核心概念与实时风控优势
在构建反洗钱 PSI 漂移告警系统之前,必须牢固掌握 Flink 的三大核心抽象:DataStream、时间语义与状态。这些概念是理解后续实时特征计算、窗口漂移检测与状态回溯的基础。本章将快速梳理这些核心概念,并阐明 Flink 在实时风控场景中不可替代的技术优势。
2.1 DataStream:实时数据的统一抽象
Flink 将一切实时数据视为 DataStream,它是不间断、有序的事件序列。在反洗钱场景中,每一笔交易、每一次登录、每一个账户变更都可以映射为 DataStream 中的一个事件。
| 概念 | 说明 | 反洗钱示例 |
|---|---|---|
| DataStream | 无界数据流,持续产生 | 交易流水流、账户行为流 |
| Transformation | 对流的转换操作(map、filter、keyBy 等) | 过滤金额 > 5 万的交易、按账户 ID 分组 |
| Sink | 输出结果到外部系统 | 写入告警表、更新 PSI 基线到 Redis |
| KeyedStream | 按 key 分区的流,后续可做状态操作 | 按 account_id 分区,计算每个账户的 PSI |
实战要点:在 PSI 漂移检测中,通常先对原始交易流做
keyBy(accountId),再对每个账户的窗口内特征分布进行统计,避免跨账户混淆。
2.2 时间语义:事件时间 vs 处理时间
Flink 支持三种时间语义,在反洗钱场景中,事件时间是最关键的选择,因为它能准确反映交易发生的真实时刻,不受系统处理延迟影响。
| 时间语义 | 定义 | 反洗钱适用性 | 注意事项 |
|---|---|---|---|
| 事件时间 | 事件在数据源产生的时间戳 | ✅ 必须使用,交易时间不可篡改 | 需配置 Watermark 处理乱序 |
| 处理时间 | 事件到达 Flink 算子的本地时钟 | ❌ 不推荐,延迟会导致漂移误判 | 仅用于调试或低精度场景 |
| 摄入时间 | 事件进入 Flink 源算子的时间 | ⚠️ 折中方案,但不如事件时间准确 | 无法处理历史数据回放 |
PSI 漂移检测要求:必须使用事件时间 + Watermark。例如,设置最大乱序容忍度为 5 秒,确保窗口内特征分布统计的时序一致性。
2.3 状态:有状态计算的基石
反洗钱 PSI 漂移检测本质上是有状态计算:需要跨多个窗口保存特征分布的历史数据,才能对比当前窗口与基线窗口的分布差异。Flink 提供了强大的状态管理机制。
| 状态类型 | 存储位置 | 反洗钱用途 | 性能特点 |
|---|---|---|---|
| ValueState | Heap / RocksDB | 存储单个账户的基线分布(如直方图) | 读写快,适合小状态 |
| MapState | Heap / RocksDB | 存储多个时间窗口的特征分布快照 | 适合 key-value 结构 |
| ListState | Heap / RocksDB | 存储窗口内所有特征值,用于事后重算 | 适合追加场景 |
| BroadcastState | Heap | 广播全局漂移阈值或模型参数 | 所有并行实例共享 |
⚠️ 状态大小控制:PSI 漂移检测中,每个账户需要保存多个窗口的特征分布。如果账户数达到百万级,必须使用 RocksDB 状态后端,并合理设置 TTL(Time-To-Live)避免状态无限膨胀。
2.4 Flink 在实时风控中的核心优势
与传统批处理或 Storm 等流处理框架相比,Flink 在实时风控领域具备以下不可替代的优势:
- Exactly-Once 语义:保证交易事件不重复、不丢失,PSI 统计结果精确可审计。
- 事件时间 + Watermark:天然处理乱序交易,避免因网络延迟导致的漂移误报。
- 高效状态管理:支持 GB 到 TB 级状态,满足大规模账户的分布存储需求。
- Savepoint / Checkpoint:支持作业无感升级、回滚,保障反洗钱系统 7×24 小时稳定运行。
- 丰富的窗口 API:滑动窗口、会话窗口等灵活支持不同时间粒度的 PSI 计算。
2.5 小结:Flink 核心概念与反洗钱 PSI 的映射
| Flink 核心概念 | 在 PSI 漂移检测中的角色 |
|---|---|
| DataStream | 交易事件流、特征值流 |
| 事件时间 + Watermark | 保证窗口切分与漂移计算的时序正确性 |
| KeyedStream | 按账户 ID 分组,独立计算每个账户的 PSI |
| 状态(ValueState / MapState) | 存储基线分布与当前窗口分布 |
| 窗口(SlidingEventTimeWindows) | 定义 PSI 计算的时间粒度(如 1 小时窗口,30 分钟滑动) |
| Checkpoint / Savepoint | 保障作业容错与版本升级时的状态一致性 |