关注

【Flink 30天】Day11-15 Checkpoint 深度解析:Barrier 机制 + Exactly-once + 生产配置 + 大状态调优

Day 11-15:Checkpoint & Savepoint & 大状态调优

目标:能独立配置一个稳定的生产任务。


1. Checkpoint 是什么

Checkpoint = Flink 定期把所有算子的状态快照持久化,用于故障恢复。

作用:任务 Failover 后从最新 CK 恢复,保证 Exactly-once 语义。


2. Checkpoint 执行原理:两阶段提交

Flink CK 采用 Chandy-Lamport 算法(Barrier 机制):

Step 1:JobManager 触发 CK,向 Source 发送 Barrier

Source(Kafka)
  ↓ 正常数据 ... [Barrier n] ... 正常数据
  当 Source 收到 Barrier 指令时,记录当前 Kafka offset,并向下游发送 Barrier

Step 2:Barrier 在 DataStream 中流动

Source  →  [data, data, Barrier]  →  Map  →  [data, data, Barrier]  →  Sink

每个算子收到 Barrier 后:

  1. 暂停处理 Barrier 之后的数据
  2. 将当前状态写入 State Backend(内存 or RocksDB)
  3. 通知 JobManager 本算子 CK 完成
  4. 继续处理后续数据

Step 3:JobManager 收到所有算子 CK 完成通知

→ 标记本次 CK 成功 → 通知 Kafka Source 提交 offset(精准一次!)


3. Exactly-once 精准一次

Flink 的 Exactly-once 分两层:

层级 说明
Flink 内部 通过 CK 保证,状态只更新一次
端到端(E2E) 需要 Source 可重放(Kafka)+ Sink 支持两阶段提交或幂等写入

端到端 Exactly-once 需要的条件

  1. Source:支持重放(Kafka 可以重设 offset)
  2. Sink:支持两阶段提交(如 Flink Kafka Producer)或幂等写入(如 ClickHouse 主键去重)
  3. CK 成功后才提交 Sink 的数据

4. CK 配置(生产推荐)

CheckpointConfig ckConfig = env.getCheckpointConfig();

// 启用 CK,间隔 1 分钟
env.enableCheckpointing(60_000L);

// 语义:精准一次(默认),如果接受 at-least-once 可以更快
ckConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/huangrunxing/article/details/158690077

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--