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
相关推荐
学传打活1 天前
古代汉语是源,现代汉语是流,源与流一脉相承。
微信公众平台·1024程序员节·汉字·中华文化
学传打活6 天前
【边打字.边学昆仑正义文化】_19_星际生命的生存状况(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
unable code13 天前
[HNCTF 2022 WEEK2]ez_ssrf
网络安全·web·ctf·1024程序员节
unable code14 天前
[NISACTF 2022]easyssrf
网络安全·web·ctf·1024程序员节
unable code15 天前
BUUCTF-[第二章 web进阶]SSRF Training
网络安全·web·ctf·1024程序员节
开开心心就好16 天前
进程启动瞬间暂停工具,适合调试多开
linux·运维·安全·pdf·智能音箱·智能手表·1024程序员节
仰泳之鹅17 天前
【51单片机】第一课:单片机简介与软件安装
单片机·嵌入式硬件·51单片机·1024程序员节
海海不瞌睡(捏捏王子)17 天前
C#知识点概要
java·开发语言·1024程序员节
小浣熊熊熊熊熊熊熊丶19 天前
飞牛NAS 安装 Teslamate 教程(docker版)
1024程序员节
程高兴19 天前
模糊PID控制的永磁同步电机矢量控制系统-SIMULINK
matlab·1024程序员节