4. Flink实时特征生产架构:整体架构图与各组件职责

实时特征生产架构是贯穿整个链路的骨架。一个生产级的实时特征系统通常由四个核心层次构成:数据源层 → Flink 计算层 → 特征存储层 → 在线服务层。每一层承担明确的职责,层与层之间通过低延迟、高吞吐的通道衔接。

架构设计要点:实时特征架构的核心矛盾在于“在线服务对低延迟的极致要求”与“Flink 计算与存储的吞吐平衡”。架构设计需围绕 毫秒级特征可见性 与 高可用特征回溯 展开。

4.1 整体架构图

下图展示了实时特征生产链路的四层架构及数据流转路径。从左侧多源数据接入,经过 Flink 作业的实时计算与特征加工,写入右侧的特征存储,最终由在线服务通过高性能接口获取特征。

Flink实时特征生产整体架构图 Flink 实时特征生产整体架构图 消息队列 (Kafka/Pulsar) 实时事件流 数据库 CDC (MySQL/MongoDB) 变更数据捕获 日志/埋点 (Filebeat/Flume) 服务端日志 数据源层 Flink 实时计算层 Source (Kafka/CDC Connector) Transformation (Join/Window/UDTF) 特征计算 (聚合/排序/编码) Sink (特征写入) 特征存储 Redis / HBase / Cassandra 特征向量 / 特征快照 TTL 管理 / 版本控制 特征存储层 在线服务 推荐 / 搜索 / 广告 / 风控 特征获取 API (毫秒级) 在线服务层

4.2 各组件职责详解

架构中的每一层都承担着不可替代的职责。下表从功能定位、技术选型、关键指标三个维度进行拆解。

架构层 核心职责 典型技术选型 关键指标
数据源层 接入实时事件流、数据库变更日志、服务端日志,提供高吞吐、低延迟的数据管道 Kafka / Pulsar / Debezium / Canal / Filebeat 吞吐量 > 10万 msg/s;端到端延迟 < 100ms
Flink 计算层 执行实时特征逻辑:多流 Join、窗口聚合、维度关联、特征编码与组合 Flink SQL / DataStream API / CEP / StateBackend (RocksDB) Checkpoint 间隔 < 30s;状态大小可控;背压 < 50%
特征存储层 存储计算后的特征向量/快照,支持高并发读取与 TTL 自动过期 Redis Cluster / HBase / Cassandra / TiKV P99 读取延迟 < 5ms;写入 QPS > 5万
在线服务层 接收上游请求,通过特征 ID 批量获取特征,返回给推荐/搜索/风控等业务 gRPC / Thrift / HTTP REST / 特征代理层 单次批量获取 < 10ms;可用性 99.99%

4.3 数据流转与关键交互

实时特征生产并非简单的“数据流入→特征流出”,各层之间存在多个关键交互点,直接影响特征质量与系统稳定性。

  • 数据源 → Flink:通过 Flink Source Connector 消费 Kafka/Pulsar,需处理分区分配、offset 提交、空闲分区检测。CDC 场景需保证 binlog 顺序与 exactly-once 语义。
  • Flink 内部:多流 Join 依赖状态后端存储中间结果;窗口聚合需合理设置 watermark 与 allowed lateness;特征计算需考虑状态 TTL 避免无限膨胀。
  • Flink → 特征存储:通过自定义 Sink 或 Flink 内置 Redis/HBase Connector 写入。写入策略需支持 幂等写入(upsert)与 批量 flush,避免小文件或频繁网络请求。
  • 特征存储 → 在线服务:在线服务通过特征 ID 批量查询,存储层需支持 多键批量 GET 与 缓存穿透保护。特征更新需考虑最终一致性与版本号机制。
架构避坑指南:
  • 避免 Flink 作业直接写入在线服务数据库,防止写入抖动影响在线读取延迟。
  • 特征存储层必须设置合理的 TTL,防止历史特征堆积导致存储膨胀与查询退化。
  • 在线服务层应设计特征降级策略:当特征缺失或超时时,使用默认值或缓存兜底。

4.4 特征存储选型对比

特征存储是连接 Flink 计算与在线服务的桥梁,选型直接影响特征读取延迟与系统复杂度。下表对比三种主流方案。

存储方案 读写性能 数据模型 TTL 支持 适用场景
Redis Cluster P99 < 3ms 读;高并发写 Hash / String / Sorted Set 原生 EXPIRE 高吞吐、低延迟特征查询;特征维度较少
HBase P99 < 10ms 读;批量写优 宽表 / 列族 列族 TTL 大规模特征(百亿级);特征维度多;需范围扫描
Cassandra P99 < 8ms 读;线性扩展 宽表 / 分区键 TTL 写入时指定 多数据中心部署;写多读少;需无主架构

4.5 架构设计原则总结

实时特征生产架构的设计需遵循以下原则,确保系统在业务高速迭代中保持稳定与可扩展。

  1. 分层解耦:数据源、计算、存储、服务四层职责清晰,层间通过标准协议(Kafka、gRPC)通信,允许各层独立扩缩容。
  2. 状态与存储分离:Flink 状态后端(RocksDB)仅用于计算过程中的中间状态,最终特征写入外部存储,避免状态膨胀影响作业稳定性。
  3. 特征时效性分级:实时特征(秒级更新)与准实时特征(分钟级更新)分开处理,避免所有特征都走高成本实时链路。
  4. 可观测性覆盖:每一层都需要暴露延迟、吞吐量、错误率指标,便于快速定位特征延迟或缺失问题。
生产环境警告:特征存储层是实时特征链路的“单点瓶颈”。务必提前做好容量规划与读写压测,避免在线服务流量突增导致存储被打穿。建议在存储前增加 本地缓存层(如 Guava Cache / Caffeine),降低对特征存储的直接压力。