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
相关推荐
懒惰蜗牛3 小时前
Day10:Python实现Excel自动汇总
python·numpy·pandas·pip·1024程序员节·python读写excel
TDengine (老段)3 小时前
从“事后抢险”到“事前防控”:江西水投用 TDengine 时序数据库重塑防汛模式
大数据·数据库·物联网·时序数据库·tdengine·涛思数据·1024程序员节
傻童:CPU3 小时前
C语言需要掌握的基础知识点之DFS(深度优先搜索)
c语言·1024程序员节
紫薯馍馍3 小时前
ThreeD Tools(PPT插件)v2.1 下载安装教程
1024程序员节
九皇叔叔3 小时前
HTML与CSS基础入门:从语法到页面结构全解析
css·html·1024程序员节
Wang's Blog4 小时前
Linux小课堂: 基于 SSH 的安全文件传输与增量同步机制深度解析之从 wget 到 rsync 的全流程实战
linux·ssh·1024程序员节
mit6.8244 小时前
[OP-Agent] `opa run` | 交互模式(REPL) | 服务模式(HTTP API) | runtime包
go·1024程序员节
Apipost的同学们4 小时前
API测试工具进化:从Postman到Apipost的全局参数管理革命
postman·api测试·1024程序员节·apipost·参数管理·全局参数管理
More more4 小时前
纯css实现任务头像叠加
1024程序员节