Appearance
Flink 时间语义、Watermark 和 Checkpoint 怎么理解:流处理为什么总和批处理不一样
Flink 入门最容易卡住的地方,通常不是代码语法,而是这三个词:
- 时间语义
- Watermark
- Checkpoint
如果这三件事没理解清楚,很多窗口和一致性问题都会变得很模糊。
先说结论
更实用的理解方式通常是:
- 时间语义回答“按什么时间算”
- Watermark 回答“系统认为时间推进到哪了”
- Checkpoint 回答“状态恢复从哪里继续”
一、为什么事件时间这么重要
因为很多真实业务数据不是严格按到达顺序进入系统的。
如果只按处理时间算,结果很可能和业务真实发生时间对不上。
二、Watermark 在解决什么问题
它本质上是在告诉系统:
- 某个时间点之前的数据,大概率已经到得差不多了
这样窗口才能决定什么时候输出结果。
三、Checkpoint 为什么是流处理稳定性的核心
因为流式任务是长时间运行的。
一旦任务失败,如果没有状态快照,很多中间进度就没法恢复。
一句话总结
理解 Flink 的关键,不是先背 API,而是先分清:
- 结果按什么时间算
- 系统如何判断时间推进
- 状态失败后如何恢复