Flink 是什么
Apache Flink 是以流处理为核心的分布式计算引擎,批处理被视作有界流的一种特例。作业以算子拓扑的形式常驻集群运行,记录在算子之间以流水线方式传递,因此能做到很低的端到端延迟;状态与检查点机制则保证故障后能一致地恢复。
四个核心机制
事件时间让结果与数据发生时刻绑定、可复现;状态让跨记录的计算(聚合、去重、join)成为可能;检查点定期把状态与消费位点做成一致快照;反压机制在算子处理不过来时把压力向上游传递,避免数据在内存里堆积到崩溃。
基本信息
| 定位 | 流批一体的分布式计算引擎,流为主 |
|---|---|
| 核心机制 | 事件时间、状态、检查点、反压 |
| 部署模式 | session 集群、per-job、application 模式 |
| 资源单位 | TaskManager 的 slot 数决定单节点可运行的并行子任务数 |
| 常用命令 | flink run / list / cancel / savepoint |
部署模式读法
| 模式 | 特点 | 适用 |
|---|---|---|
| session | 集群常驻,多作业共享资源 | 开发与调试,作业间可能互相影响 |
| per-job | 每个作业一个集群,资源隔离 | 生产常用,作业结束集群释放 |
| application | main 方法在集群侧执行 | 依赖与配置随作业提交,隔离更彻底 |
典型使用场景
- 实时加工:消费 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 分区数不匹配时,部分并行实例空闲或过载:并行度高于分区数会造成实例空转,低于分区数则单个实例要处理多个分区,扩缩容时要把两者一起调整。