Flink非对齐checkpoint踩坑记

使用flink非对齐checkpoint的背景

作业配置如下

jobmanager 配置:2个 1cpu, 8g内存, 10g磁盘

taskmanager配置:250个,每个2slot,8cpu,20g,80g磁盘


在当前flink任务拓扑如下:

所有的流处理最后都汇聚到A算子,导致A算子cpu busy 100%,且持续将不下去,引起上游算子背压严重。导致checkpoint的 barrier不能对其,进而导致checkpoint 超时失败。

  1. 刚开始的处理思路:在不扩容,不增加资源开销的情况下解决问题,于是就想到了使用flink 非对齐checkpoint。踩了很多坑,引起下面一系列问题。
  2. 最后的解决思路:增加当前算子的并行度,扩展到原来的3~5倍,并配置独享槽。在这个过程需要抛弃状态,重置kafka的位点到最早,尽量保证数据的正确性,重启作业。这样配置以后整个作业的健康度就好很多,如下:

flink使用非对齐checkpoint的坑

  1. 虽然是flink1.11引入的,但直到flink1.18以后才成熟,
    在flink1.18之前使用,不能扩展并行度,否则会报错如下:
javajava.lang.IllegalStateException: 复制代码
	at org.apache.flink.streaming.runtime.io.recovery.DemultiplexingRecordDeserializer.select(DemultiplexingRecordDeserializer.java:121)
	at org.apache.flink.streaming.runtime.io.recovery.RescalingStreamTaskNetworkInput.processEvent(RescalingStreamTaskNetworkInput.java:181)
	at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:128)
	at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:498)
	at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:203)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:809)
	at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:761)
	at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:1066)
	at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:1045)
	at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:858)
	at org.apache.flink.runtime.taskmanager.Task.run(Task.java:644)
	at java.lang.Thread.run(Thread.java:748)

这是flink在1.18之前的bug,官网说明

  1. flink1.18之后虽然可以进行并行度扩展,但是in-flihgt中间态的数据会在checkpoint是保存下来,使得整个checkpoint的数据量剧增几倍到几十倍。
    并且,对其checkpoint可以切换到非对齐checkpoint,但非对齐checkpoint不能切换到对其checkpoint。

极端情况下使用flink非对齐checkpoint的场景

只有在上游被压特别严重,扩容解决不了的情况下;并且substask之前的数据传数数据量(inflight)可控,使得checkpoint可控不至于巨大而引起新的问题,例如:如果checkpoint数据量巨大可能上传到远程分布式文件系统时过慢,或者远程文件系统磁盘性能查导致读写盘时间过长,从而导致checkpoint超时,checkpoint失败。

使用非对齐checkpoint是的配置

bash 复制代码
#是否启用非对齐检查点,风险巨大,非极端情况下不建议用,flink1.18之后才成熟
        # 仅当 execution.checkpointing.mode 为 EXACTLY_ONCE 且 execution.checkpointing.max-concurrent-checkpoints 为 1 时,才能启用非对齐检查点。
        execution.checkpointing.unaligned: true
        execution.checkpointing.max-concurrent-checkpoints:1
        execution.checkpointing.mode: EXACTLY_ONCE
相关推荐
开开心心就好17 小时前
内存清理工具开源免费,自动优化清理项
linux·运维·服务器·python·django·pdf·1024程序员节
张萌杰4 天前
深度学习的基础知识(常见名词解释)
人工智能·深度学习·机器学习·1024程序员节
开开心心就好5 天前
免费无广告卸载工具,轻便安全适配全用户
linux·运维·服务器·网络·安全·启发式算法·1024程序员节
开开心心就好6 天前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
徐子童8 天前
网络协议---TCP协议
网络·网络协议·tcp/ip·面试题·1024程序员节
扫地的小何尚9 天前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
数据皮皮侠AI10 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
开开心心就好11 天前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
Evan东少13 天前
[踩坑]笔记本Ubuntu20.04+NvidiaRTX5060驱动+cuda+Pytorch+ROS/Python实现人脸追踪(环境准备)
1024程序员节
不爱编程的小陈15 天前
C/C++每日面试题
面试·职场和发展·1024程序员节