1. 课程导论与因子计算概述

1.1 什么是实时因子计算

实时因子计算是指对持续流入的数据流,在毫秒/秒级延迟内完成特征提取、指标聚合与模型打分,并输出可用于决策的结构化数值或标签的过程。与离线批处理不同,实时因子计算要求数据“来一条算一条”或“来一个窗口算一次”,结果立即生效。

核心特征: 低延迟(端到端 < 1s)、高吞吐(万级 TPS 以上)、状态持续(跨事件关联)、结果可回溯(支持历史因子回放)。

实时因子计算在技术栈上通常依赖流计算引擎(如 Flink)、消息队列(Kafka/Pulsar)、在线特征存储(Redis/HBase)以及规则引擎或模型推理服务。因子本身是业务可解释的数值化指标,例如“用户过去 5 分钟登录失败次数”、“当前持仓相对于 20 日均线的偏离度”、“商品详情页最近 10 秒的点击率”。

维度 离线因子计算 实时因子计算
触发方式 T+1 定时调度 事件驱动 / 窗口触发
延迟要求 小时级 ~ 天级 毫秒级 ~ 秒级
数据源 离线数仓 / Hive Kafka / Pulsar 实时流
状态管理 无状态(全量扫描) 有状态(Keyed State)
典型框架 Spark / Hive / MapReduce Flink / Kafka Streams
实时因子计算核心流程 数据源 Kafka / Pulsar 解析与清洗 反序列化 / 过滤 因子计算引擎 Flink 算子 / 窗口 状态存储 RocksDB / Heap 结果输出 Kafka / Redis 决策应用 风控 / 推荐 / 量化 说明 状态存储支持跨事件关联 如滑动窗口计数、Session 识别

1.2 因子计算在风控 / 推荐 / 量化交易中的应用场景

1.2.1 风控场景

  • 实时反欺诈: 计算“同一设备 1 分钟内关联的账号数”、“IP 地址在 5 秒内的注册请求频次”,触发规则拦截。
  • 信用评分: 基于用户实时交易流水,计算“近 30 天逾期次数”、“近 1 小时大额交易占比”等因子,动态调整授信额度。
  • 交易监控: 对每笔支付请求,实时计算“商户历史拒付率”、“用户当前地理位置与常用地距离”,输出风险等级。

1.2.2 推荐场景

  • 实时兴趣画像: 统计“用户最近 10 分钟点击的商品类目分布”、“当前 Session 内加购但未支付的商品 ID 列表”,用于召回排序。
  • 热门榜单: 基于滑动窗口计算“商品最近 5 分钟的曝光点击率”、“直播间实时在线人数”,动态更新推荐列表。
  • 冷启动: 对新用户,利用“当前设备型号”、“首次打开时间”、“初始浏览行为”等因子,快速生成试探性推荐。

1.2.3 量化交易场景

  • 技术指标: 实时计算“5 分钟 K 线的移动平均线(MA)”、“相对强弱指数(RSI)”、“布林带上下轨”,辅助策略决策。
  • 订单簿因子: 基于逐笔成交和挂单数据,计算“买卖盘口深度差”、“最近 1 秒的成交量加权价格(VWAP)”。
  • 风险监控: 计算“投资组合的实时波动率”、“单一标的持仓占比”、“杠杆倍数”,触发风控强平或减仓。
应用领域 典型因子示例 计算窗口 延迟要求
风控 登录失败次数、设备关联账号数 1min / 5min 滑动窗口 < 500ms
推荐 点击率、类目偏好、Session 时长 10min / Session 窗口 < 1s
量化交易 MA、RSI、买卖盘口深度 1min / 5min / Tick 级 < 100ms
场景选择建议: 风控场景对准确率和延迟最敏感,推荐优先使用 Flink 的 KeyedProcessFunction 结合定时器实现精确一次语义;推荐场景更关注吞吐和窗口灵活性,可结合 Table API 简化开发;量化交易场景对毫秒级延迟和状态一致性要求极高,建议使用 Flink 的异步 I/O 和 RocksDB 状态后端。

1.3 课程目标与前置知识要求

课程目标

  1. 掌握实时因子计算的核心概念、架构模式与设计原则。
  2. 熟练使用 Flink DataStream API 和 Table API 实现常见因子(计数、聚合、比率、排序、Session 识别)。
  3. 理解 Flink 状态管理、时间语义、容错机制在因子计算中的最佳实践。
  4. 能够独立搭建一套生产级的实时因子计算服务,包含数据接入、因子编排、结果输出与监控告警。
  5. 具备将离线因子迁移为实时因子的工程能力,并处理乱序、迟到数据等真实挑战。

前置知识要求

知识领域 具体要求 推荐学习资源
Java / Scala 基础 熟悉面向对象、Lambda 表达式、泛型、集合操作 《Java 核心技术》第 1-6 章
Flink 入门 了解 DataStream 基本概念、WordCount 示例 Flink 官方文档 Quickstart
消息队列 理解 Kafka 主题、分区、消费者组概念 Kafka 官方文档 Introduction
SQL 基础 掌握 SELECT、JOIN、GROUP BY、窗口函数 LeetCode SQL 入门题
Linux 基础 能使用命令行、编辑配置文件、查看日志 《鸟哥的 Linux 私房菜》基础篇
注意: 本课程不从头讲解 Flink 基础 API,建议学员在开课前至少完成 Flink 官方 Quickstart 中的 DataStream 和 Table 示例。如果对状态后端、检查点、Watermark 等概念不熟悉,建议先阅读 Flink 官方文档“Concepts”章节。
课程知识体系与前置依赖 Java / Scala 基础 面向对象 / Lambda Flink 入门 DataStream / WordCount 消息队列 / SQL / Linux Kafka / 窗口函数 / 命令行 因子计算架构 数据流 / 状态 / 窗口 Flink 实战开发 API / 状态 / 容错 生产部署与监控 Kubernetes / Prometheus 课程产出 独立搭建实时因子 计算服务 迁移离线因子