Flink Checkpoint 执行流程及优化方案

Flink Checkpoint 优化:非对齐检查点与动态缓冲区调整
本文深入探讨了Flink的Checkpoint机制,包括执行流程、常见问题及解决方案。针对数据流动缓慢和状态数据过大的挑战,提出了非对齐Checkpoint(FLIP-76)和动态调整Buffer大小(FLIP-183)的优化策略,旨在减少Checkpoint时间并提高系统性能。此外,还介绍了通用增量快照(FLIP-158)以解决全量与增量Checkpoint的不稳定问题,通过状态变更日志实现快速稳定的Checkpoint过程。

Flink Checkpoint主要从以下几方面进行介绍:

  1. Checkpoint 执行流程
  2. checkpoint 执行失败问题分析
  3. 非对齐checkpoint 优化方案
  4. 动态调整 buffer 大小
  5. 通用增量快照

1. checkpoint 执行流程

在这里插入图片描述
如上图所示,chechpoint 在执行过程中,可以简化为可以简化为以下四大步:
在这里插入图片描述

  • 在数据流中插入 checkpoint barrier;
  • 每执行到当前算子时,对算子 state 状态进行同步快照与异步上传;
  • 当算子是多输入时,要进行 barrier 对其操作;
  • 所有算子状态都已上传,确认 checkpoint 完成;

2. checkpoint 执行失败问题分析

Flink 机制是基于 Chandy-Lamport 算法实现的 checkpoint 机制,在正常情况下,能够实现对正常处理流程非常小的影响,来完成状态的备份。但仍存在一些异常情况,可能造成checkpoint 代价较大。
在这里插入图片描述

  • 问题1:数据流动缓慢

我们知道 Flink 的 checkpoint 机制是基于 barrier 的,在数据处理过程中,barrier 也需要像普通数据一样,在 buffer 中排队,等待被处理。当 buffer 较大或者数据处理较慢时,barrier 需要很久才能够到达算子,触发 checkpint。尤其是当应用触发反压时,barrier 可能要在 buffer 中流动数个小时,这显然是不合适的。而另外一种情况则更为严重,当算子需要 barrier 对齐时,如果一个输入的 barrier 已经到达,那么该输入 barrier 后面的数据会阻塞住,不能被处理的,需要等待其他输入 barrier 到达之后,才能继续处理。如果有一个输入的数据流动缓慢,那么等待 barrier 对齐的过程中,其他输入的数据处理都要暂停,这将严重影响应用的实时性。
针对数据流动缓慢的问题,解决思路有两个:
一、让 buffer 中的数据变少;
二、让 barrier 能跳过 buffer 中缓存的数据;
上述的解决办法正是 Flink 社区提出的两个优化方案,分别为 FLIP-76: Unaligned CheckpointsFLIP-183: Dynam

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phial03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值