1. Flink概述与批流一体概念

1.1 Flink发展历史

Apache Flink 起源于 2010 年柏林工业大学的一个研究项目“Stratosphere”,最初目标是构建一个同时支持批处理和流处理的大数据计算引擎。2014 年,该项目成为 Apache 软件基金会的顶级项目,正式更名为 Apache Flink。此后,Flink 经历了多个重要里程碑:

时间 里程碑 核心意义
2010 Stratosphere 项目启动 奠定批流统一的理论基础
2014 成为 Apache 顶级项目 正式命名为 Flink,社区快速壮大
2015 Flink 1.0 发布 引入 DataStream API,流处理能力成熟
2019 Flink 1.9 发布 引入批流一体架构(Blink Planner)
2021 Flink 1.13 发布 批流一体正式 GA,统一 Source/Sink 接口
2023+ Flink 1.17+ 批流一体性能优化,特征工程生态成熟
关键认知: Flink 的批流一体并非简单的“批处理 + 流处理”拼接,而是从架构层面将批处理视为“有界流”,用同一套运行时引擎处理所有数据场景。

1.2 核心特性

Flink 的核心特性使其在实时计算和特征工程领域占据独特优势:

  • 真正的流处理引擎: 每条数据逐条处理,延迟低至毫秒级,支持事件时间(Event Time)语义,保证乱序数据下的准确性。
  • 有状态计算: 内置状态后端(State Backend),支持大规模状态管理,适合特征聚合、窗口统计等场景。
  • 精确一次语义(Exactly-Once): 通过分布式快照(Checkpoint)机制,保证故障恢复后数据不丢不重。
  • 批流一体架构: 同一套 API 编写批处理和流处理作业,代码复用率超过 80%。
  • 高吞吐低延迟: 基于内存计算和异步 I/O,单节点吞吐量可达百万条/秒。
  • 丰富的生态连接: 原生支持 Kafka、HDFS、HBase、Redis、Elasticsearch 等数据源与目标。
特征工程视角: Flink 的状态管理和事件时间语义,天然适合生成时间窗口特征、滑动聚合特征、序列特征等实时特征,这是传统批处理引擎(如 Spark Batch)难以高效实现的。

1.3 批处理与流处理的统一架构

Flink 批流一体的核心思想是:批处理是流处理的一种特例。批处理的数据集是“有界流”(Bounded Stream),流处理的数据集是“无界流”(Unbounded Stream)。两者在运行时共享同一套执行引擎、调度器和容错机制。

Flink 批流一体统一架构 数据源层(Data Source) Kafka / Pulsar / Kinesis(无界流) | HDFS / Hive / 文件(有界流) 统一运行时层(Unified Runtime) 分布式数据流引擎(Dataflow Engine) Checkpoint 容错 | 状态管理 | 内存管理 | 调度器 统一 API 层(Unified API) DataStream API(流) | Table API & SQL(批流统一) 应用层(Application) 实时特征工程 | 离线特征计算 | 实时数仓 | ETL | 机器学习

统一架构的核心优势在于:

  • 代码复用: 同一套 SQL 或 DataStream API 代码,只需切换执行模式(Streaming / Batch)即可运行在不同数据场景。
  • 运维简化: 批作业和流作业共享集群资源、监控体系和运维工具。
  • 语义一致: 批处理和流处理使用相同的事件时间语义、状态语义和容错语义,避免“批流两张皮”带来的数据不一致问题。

1.4 Flink在特征工程中的优势

特征工程是机器学习流程中最耗时、最关键的环节。Flink 的批流一体能力为特征工程带来了以下独特价值:

特征工程需求 传统方案痛点 Flink 解决方案
实时特征计算 需要独立搭建流处理系统,与离线特征割裂 批流一体,同一套逻辑同时产出实时和离线特征
时间窗口特征 Spark Streaming 微批次延迟高,窗口语义弱 原生事件时间窗口,毫秒级延迟,精确语义
状态聚合特征 需要外部存储(Redis)维护状态,复杂度高 内置状态后端,支持大规模 Keyed State 管理
特征回溯补全 离线批处理和实时流处理两套代码,容易不一致 批流一体,离线回溯直接复用流处理逻辑
特征数据一致性 批流数据口径不一致,模型训练和推理效果差 Exactly-Once 语义保证特征数据不丢不重
Flink 在特征工程中的核心优势 Flink 特征引擎 批流一体 离线/实时特征统一代码 事件时间窗口 精确时间特征,乱序处理 内置状态管理 Keyed State 聚合特征 Exactly-Once 语义 特征数据不丢不重 高吞吐低延迟 百万级 QPS 实时特征 💡 特征工程最佳实践 使用 Flink 批流一体架构,一套代码同时产出离线训练特征和在线推理特征,彻底消除特征不一致问题
常见误区: 很多团队在特征工程中仍然采用“离线 Spark + 实时 Flink”的双引擎架构,导致离线特征和实时特征口径不一致,模型上线后效果下降。Flink 批流一体架构正是解决这一问题的关键方案。

1.5 本章小结