首页/数据/数据工程与 ETL 速查/Apache Flink 核心概念
管道基础52 条

Apache Flink 核心概念

Flink 是面向流处理的分布式引擎,也支持批模式:以事件时间与状态为核心,checkpoint 保证一致性恢复;作业按并行算子拓扑常驻运行。

Flink 是什么

Apache Flink 是以流处理为核心的分布式计算引擎,批处理被视作有界流的一种特例。作业以算子拓扑的形式常驻集群运行,记录在算子之间以流水线方式传递,因此能做到很低的端到端延迟;状态与检查点机制则保证故障后能一致地恢复。

四个核心机制

事件时间让结果与数据发生时刻绑定、可复现;状态让跨记录的计算(聚合、去重、join)成为可能;检查点定期把状态与消费位点做成一致快照;反压机制在算子处理不过来时把压力向上游传递,避免数据在内存里堆积到崩溃。

基本信息

定位流批一体的分布式计算引擎,流为主
核心机制事件时间、状态、检查点、反压
部署模式session 集群、per-job、application 模式
资源单位TaskManager 的 slot 数决定单节点可运行的并行子任务数
常用命令flink run / list / cancel / savepoint

部署模式读法

模式特点适用
session集群常驻,多作业共享资源开发与调试,作业间可能互相影响
per-job每个作业一个集群,资源隔离生产常用,作业结束集群释放
applicationmain 方法在集群侧执行依赖与配置随作业提交,隔离更彻底

典型使用场景

  • 实时加工:消费 Kafka 流做清洗、关联与聚合,结果写回 Kafka 或存储
  • 实时数仓分层:按 ODS 到 DWS 的流式链路持续产出指标
  • CDC 同步:直接用 Flink CDC 连接器读取数据库变更并加工
  • 实时风控与告警:按秒级窗口统计异常行为并触发动作
  • 批流统一:同一套 SQL 逻辑同时用于流式与离线场景

提交与管理作业

提交与管理作业
# 提交作业(-d 表示提交后即返回,不占用终端)
flink run -d -c com.example.OrdersStreamJob /opt/jobs/orders.jar

# 查看正在运行的作业与状态
flink list

# 从最近一次检查点恢复(升级或扩缩容后常用)
flink run -d -s hdfs:///flink/checkpoints/<job-id>/chk-100 /opt/jobs/orders.jar

# 取消作业(可先打 savepoint 再取消,便于日后从该点恢复)
flink savepoint <job-id> hdfs:///flink/savepoints
flink cancel <job-id>
Flink 作业本身不负责「按天调度」:常驻流作业与调度平台是互补关系。实时链路交给流作业,口径复盘、历史补数交给调度跑的批任务。
并行度与 Kafka 分区数不匹配时,部分并行实例空闲或过载:并行度高于分区数会造成实例空转,低于分区数则单个实例要处理多个分区,扩缩容时要把两者一起调整。

易错点

  • 并行度与 Kafka 分区数不匹配,部分并行实例空闲、部分过载,资源利用率明显偏低
  • 作业重启从检查点恢复时位点回退,消息会重复消费,落库端必须幂等
  • 把流作业当调度任务使用,指望它「跑完一天就退出」,与常驻运行模型根本冲突
  • 只调高并行度而不调大 slot 与内存,TaskManager 资源不足导致作业无法启动或频繁失败

数据来源与参考

  • Apache Flink 官方文档:Concepts 与 Deployment
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌