目录

前言

问题描述

问题定位

checkpoint的基本原理

思路

现象

问题解决

前言

Flink容错机制的核心部分是绘制分布式数据流和操作员状态的一致快照。这些快照充当一致的检查点,如果发生故障,系统可以回退到这些检查点。Flink绘制这些快照的机制在“分布式数据流的轻量级异步快照”中进行了介绍。它受 用于分布式快照的标准Chandy-Lamport算法的启发, 并且专门针对Flink的执行模型进行了量身定制。

问题描述

flink任务,从kafka中获取数据,经过处理,写入到另外的一个kafka中,开启了checkpoint,配置如下:

        CheckpointConfig config = env.getCheckpointConfig();// 任务流取消和故障时会保留Checkpoint数据,以便根据实际需要恢复到指定的Checkpointconfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);// 设置checkpoint的周期, 每隔3000 ms进行启动一个检查点config.setCheckpointInterval(3 * 60 * 1000);// 设置模式为AT_LEAST_ONCE,降低性能损耗config.setCheckpointingMode(CheckpointingMode.AT_LEAST_ONCE);// 确保检查点之间有至少500 ms的间隔【checkpoint最小间隔】config.setMinPauseBetweenCheckpoints(500);// 检查点必须在2分钟内完成,或者被丢弃【checkpoint的超时时间】config.setCheckpointTimeout(2 * 60 * 1000);// 同一时间只允许进行一个检查点config.setMaxConcurrentCheckpoints(1);

通过flink web页面发现checkpoint总是失败,checkpoint超时(时间>CheckpointTimeout)。

问题定位

在解决这个问题之前,我们先应该了解下flink checkpoint的基本原理

checkpoint的基本原理

  1. jobManager发起checkpoint
  2. source Task将Barriers 注入到数据流中向下流动
  3. 中间operator从所有的输入通道中接收到Barriers后(对齐),制作快照,给jobmanager发送ack消息,同时将Barriers发送到其所有输出
  4. 最后sink完成checpoint后,整个checkpoint完成

注:flink提供了俩种语义,Exactly Once和At Least Once语义,俩者之间不同点在于,在并行度下,operator存在多个输入端,operator从其中一个输入端接收到Barriers后,会存在俩种情况

  1. Exactly Once:停止处理数据,等待所有输入端Barriers到达
  2. At Least Once:继续处理数据,不会阻塞处理

思路

通过原理我们可以知道,排除配置问题(状态后端配置错误,因为统一配置,所以基本不会存在配置错误)外,影响checkpoint时间的因素Barriers对齐时间,

影响Barriers对齐其实本质是数据的流动问题,而影响数据流动的因素有俩个

  1. 反压:导致数据流动堵塞
  2. 数据倾斜:导致某一个输入端的Barriers到达慢,对齐时间长(对齐需要所有输入端都到达才可以

现象

我们通过flink web管理台里可以看到,如下图的失败详情,可以看到一个并行度为24的算子,17和23这俩个subtask,迟迟没有对齐,

我们打开对应的任务监控,如下图,发现了数据倾斜问题,那么到底是什么原因导致的数据倾斜呢,

在flink任务里可以看到这个东西,这个代表的就是flink的分区器,

flink提供了如下的分区器策略

  1. ForwardPartitioner:FORWARD
  2. ShufflePartitioner,SHUFFLE
  3. RebalancePartitioner:REBALANCE
  4. RescalePartitioner:RESCALE
  5. KeyGroupStreamPartitioner:HASH
  6. CustomPartitionerWrapper:CUSTOM

Keyby:hash,最容易造成数据倾斜,通过上边的图,我们基本可以判断,是keyby导致到数据倾斜

问题解决

既然直接知道是keyby导致的数据倾斜,在keyby里key后缀增加随机数,使得数据均匀分布

.keyBy(new KeySelector<JSONObject, String>() {@Overridepublic String getKey(JSONObject jsonObject) throws Exception {String eventcode = jsonObject.getString(Constants.EVENT_CODE);return eventcode + RandomUtils.nextInt(0, 128);}
})

问题解决!

Flink checkpoint失败相关推荐

  1. 【Flink】Flink 反压机制 导致checkpoint 失败

    1.概述 转载:flink检查点checkpoint失败问题总结-2 问题描述:检查点刚开始是可以的做checkpoint的,后期越来越不能够做checkpoint的情况总结 2.反压问题 2.1 什 ...

  2. 记录:Flink checkpoint 过期导致失败(线上问题)

    报错信息: 2021-08-18 18:28:40,502 INFO org.apache.flink.runtime.checkpoint.CheckpointCoordinator [] - Tr ...

  3. Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序?

    Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序? 1 前言 1.1 什么是 state? 要说 checkpoint,首先要从 state 聊起.之前有被问到对于 ...

  4. Flink Checkpoint 问题排查实用指南

    在 Flink 中,状态可靠性保证由 Checkpoint 支持,当作业出现 failover 的情况下,Flink 会从最近成功的 Checkpoint 恢复.在实际情况中,我们可能会遇到 Chec ...

  5. flink checkpoint 恢复_干货:Flink+Kafka 0.11端到端精确一次处理语义实现

    2017年12月Apache Flink社区发布了1.4版本.该版本正式引入了一个里程碑式的功能:两阶段提交Sink,即TwoPhaseCommitSinkFunction.该SinkFunction ...

  6. flink checkpoint 恢复_Flink解析 | Apache Flink结合Kafka构建端到端的ExactlyOnce处理

    周凯波(宝牛) 阿里巴巴技术专家,四川大学硕士,2010年毕业后加入阿里搜索事业部,从事搜索离线平台的研发工作,参与将搜索后台数据处理架构从MapReduce到Flink的重构.目前在阿里计算平台事业 ...

  7. flink checkpoint 重启_Flink进阶教程:Checkpoint机制原理剖析与参数配置

    在Flink状态管理详解:Keyed State和Operator List State深度解析这篇文章中,我们介绍了Flink的状态都是基于本地的,而Flink又是一个部署在多节点的分布式引擎,分布 ...

  8. Flink检查点失败问题-汇总

    原创作品:https://blog.csdn.net/fct2001140269/article/details/88404441 禁止转载 参考检查点失败的文章:https://www.jiansh ...

  9. flink checkpoint

    我们直到flink被称为有状态的流处理引擎,所谓状态,就是指flink流处理中所保持的一些状态数据,比方说我们要统计当前用户是否在流中已经出现过,就需要在流中保存一个状态,此状态记录着所有已经出现过的 ...

最新文章

  1. C++ Primer英文版(第5版)
  2. 利用or构造SQL巧妙注射
  3. Taro -- 微信小程序登录
  4. Android开发之使用Handler封装下载图片工具类(源代码分享)
  5. 面向对象方法的优势简化软件开发的过程_软件开发技巧的途径
  6. 【Processing学习笔记】安装与入门
  7. opensips mysql 版本_Opensips-1.11版本安装过程
  8. Cache计算的再总结
  9. Hello Word!
  10. BaseAdapter使用的三种形式,逗比式,普通式,文艺式
  11. JSOI2007 文本生成器
  12. Python游戏编程(一)“猜数字”游戏
  13. 学前端需要什么基础知识(前端需要掌握什么 )
  14. caj转pdf的方法
  15. XAMARIN运行IPHONE模拟器
  16. 先思索后动笔:论讨论与结论的区别
  17. 2012最犀利语录大全
  18. mac软件拖到dock,重启后显示问号?,的解决方法
  19. process launch failed: timed out waiting for app to launch问题解决
  20. 3.3.6 Binomial Trees

热门文章

  1. 强化学习在人岗匹配系统中的应用
  2. 实战Linux Bluetooth编程
  3. vue 引入js文件
  4. 离线版Gerber查看器+PCB/PCBA检测神器新功能!
  5. 4路3G-SDI的两种拼接方式(SQD和2-SI)
  6. dreamweaver 服务器文件夹 本地站点文件夹,使用站点定义向导定义本地文件夹
  7. 实现登录功能时,需要登录两次才能成功
  8. 微信突然公开阅读数背后
  9. matlab带传动设计
  10. 远程鼠标,键盘,云鼠标