首页/数据/数仓建模速查/Flink:流批一体的实时计算引擎
湖仓与引擎63 条

Flink:流批一体的实时计算引擎

Flink 以事件时间和状态为核心,天然支持流处理与批处理;实时数仓中承担 CDC 入湖、实时 ETL 与实时指标计算。

数仓建模速查数据更新于 2026-10-13

Flink 是什么

Flink 是流批一体的分布式计算引擎,核心概念是事件时间与状态:数据按自身携带的时间戳参与计算,算子状态可持久化并在故障后恢复,因此能实现至少一次乃至精确一次的处理语义。在实时数仓里它主要承担三件事:CDC 数据入湖、实时 ETL、实时指标计算,也能用同一套 API 跑有界数据的批处理。

基本信息

定位流批一体的有状态计算引擎
核心概念事件时间、水位线、状态、检查点
典型场景实时数仓、CDC 入湖、实时告警
部署方式YARN / Kubernetes / Standalone
处理语义依靠检查点实现精确一次

典型使用场景

  • 业务库变更经 CDC 推到消息队列,Flink 实时写入 Iceberg、Hudi 等湖表
  • 实时大屏指标:从消息队列消费埋点,按分钟窗口聚合后写入分析库
  • 实时规则与告警:支付超时、库存阈值等场景边算边触发
  • 实时宽表加工:多路流按主键关联,供下游即席查询
  • 历史回补:同一份逻辑用批模式重跑,避免维护两套代码

提交实时作业

提交实时作业
flink run -d -p 8 \
  -c com.demo.TradeOrderJob \
  /opt/jobs/trade-order-job.jar \
  --kafka.bootstrap broker:9092 \
  --checkpoint.interval 60000
# -d 后台提交,-p 指定并行度(建议与 Kafka 分区数对齐)
# 提交后用 flink list 与 Flink UI 确认作业处于 RUNNING

检查点配置

检查点配置
# flink-conf.yaml 中的常见检查点配置
execution.checkpointing.interval: 60s          # 检查点间隔
execution.checkpointing.mode: EXACTLY_ONCE     # 精确一次语义
state.backend: rocksdb                         # 大状态作业建议用 RocksDB
state.checkpoints.dir: hdfs://nn/flink/checkpoints   # 状态快照存放位置

关键概念对照

概念说明常见配置
事件时间用数据自带时间戳计算,结果可重放要求源数据带可靠的时间字段
水位线用时间阈值界定乱序边界,决定窗口何时触发乱序严重的场景适当放宽
状态算子记忆的中间数据,如去重键、窗口累加值大状态使用 RocksDB 状态后端
检查点周期性快照状态,用于故障恢复间隔与存储写入压力需要权衡
并行度与消息队列分区数对齐可避免消费瓶颈:并行度小于分区数时,单个子任务要消费多个分区,处理能力被单点限制;并行度远大于分区数又会浪费资源。
Flink SQL 适合快速搭实时链路,复杂逻辑或精细的状态控制仍要用 DataStream API。生产上常见组合是 SQL 做主力加工,个别算子用 API 实现后统一提交。

易错点

  • 并行度与消息队列分区数不匹配:部分分区成为消费瓶颈,整体吞吐上不去
  • 检查点间隔设得过大:故障恢复要重放大量数据,恢复时间不可控
  • 状态不设过期或清理:状态无限增长,检查点越来越大直至失败
  • 用处理时间代替事件时间:数据积压或延迟时统计结果与业务口径不符
  • 上线前不测乱序与迟到数据:水位线一推进就无法再修正已输出结果

数据来源与参考

  • Apache Flink 官方文档:Flink Architecture
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌