Flink / Kafka - Recovery is suppressed by FixedDelayRestartBackoffTimeStrategy 排查与修复 ———————————————— 版权声明:本文为CSDN博主「BIT_666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/BIT_666/article/details/125419738

简介: 使用 Flink - Kafka 接数据 Source 时程序报错:org.apache.flink.runtime.JobException: Recovery is suppressed by FixedDelayRestartBackoffTimeStrategy,任务每次启动后持续10min左右,然后 RUNNING -> FAILED,如此重启失败了多次。

一.引言

使用 Flink - Kafka 接数据 Source 时程序报错:

org.apache.flink.runtime.JobException: Recovery is suppressed by FixedDelayRestartBackoffTimeStrategy

image.gif

任务每次启动后持续10min左右,然后 RUNNING -> FAILED,如此重启失败了多次。

二.问题现象

1.任务 URL 界面

对应任务界面可以看到有一个 Source 的 3 个 Task 在任务启动的时间内一直处于 INITIALIZING 状态,直到任务结束。

image.gif编辑

2.yarn 界面

上述报错情况下 yarn 界面如下,任务重启后大约 7min 失败

image.gif编辑

三.问题分析与解决

1.Source 持续 INITIALIZING 与 周期性 Failed

查看异常栈日志:

image.gif编辑

A.持续 INITIALIZING

从下往上看,显示任务被远程的 taskManager close,结合上面 Source 端有 3 个 task 一直处于 INITIALIZING 状态,大概率是因为某 broker crash ,从而导致无法 ping 通该节点,导致超时无法启动,当超时时间大于 flink 规定的心跳周期,任务 INITIALIZING -> FAILED,所以出现URL 的持续 INITIALIZING。

B.周期性 Failed

再往上是:Flink Recovery is suppressed by FixedDelayRestartBackoffTime,其中 maxNumberRestartAttempt 为 3,此时我们可以到提交客户端的 flink-conf.yaml 查看对应配置:

restart-strategy: failure-rate
restart-strategy.failure-rate.failure-rate-interval: 2 min

image.gif

可以看到重启策略为 failure-rate 即周期性的重启,其中周期为 2min,结合上面 maxNumberRestartAttempt = 3,这也找到了为什么程序 7min 左右循环退出的原因了,程序有1 min 左右的申请资源和初始化启动的时间,运行期间出现故障,按照 failure-rate 策略重启共计耗时 3 x 2min = 6min,3次尝试后任务仍然无法运行( taskManger 持续 ping 不通导致故障) 达到最大重启次数,任务退出。

filure-rate 重启策略如下:

重启策略在出现故障后重新启动作业,但当超过故障率(每个时间间隔的故障数)时,作业最终会失败。在两次连续的重启尝试之间,重启策略会等待固定的时间。

image.gif编辑

也可以在代码中配置:

val env = StreamExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // max failures per unit
  Time.of(5, TimeUnit.MINUTES), //time interval for measuring failure rate
  Time.of(10, TimeUnit.SECONDS) // delay
))

image.gif

查看更多的重启策略信息可以查看官方 API:Flink 重启策略

2.问题解决

上面分析了很多,又是看日志,又是看官方 API,问题解决的方法其实很简单:

A.获取持续处于 INITIALIZING 的 task 对应的 Broker 地址

找到对应 source 对应 kafka 的 properties 配置中的 bootstrap.servers 参数即可,一般形式为 "broker1:port,broker2:port,broker3:port,..."

B.Ping 各个 broker

ping $broker

image.gif

分别 ping 对应 broker 对应机器,如果该 broker 正常会快速显示下述类似信息:

image.gif编辑

如果该 broker 异常,则 ping 后 shell 界面处于 _ 的等待状态,此时说明对应 broker 连接异常。

C.将异常 broker 从  bootstrap.servers 参数中剔除重启

一般情况下 kafka 都会有机器设置的冗余且实现互备,所以正常情况下去掉单台 broker 重启后任务不受影响

3.其他系统问题

Recovery is suppressed by FixedDelayRestartBackoffTimeStrategy 该报错主要是告知对应任务故障重启,主要异常分析还是要依靠最开始的异常栈确定异常源头,且大部分是与 flink 相关的系统参数,配置有关,例如本例就是 flink 的 source 端无法完全启动导致。除了上述 broker crash 掉点导致的 connection refused 之外

A.时间语义不匹配

还可能因为任务的时间语义与env设置不匹配导致任务重启并最终故障:

// 事件时间 
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
// 处理时间 
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

image.gif

B.TimeWindowAll 并行度

TimeWindowAll 的并行度默认为1,不可以修改,如果代码内 setParallelism > 1 则会在任务 submit 时直接报错

C.non serializable field 序列化

如果在 Source 函数或者其他需要序列化的类内初始化了不可序列化的变量会在任务启动时报错,需要使该变量支持序列化或采用其他方式解决

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
SQL Java Serverless
实时计算 Flink版操作报错合集之在写入SLS(Serverless Log Service)时出现报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
1276 61
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
|
消息中间件 Kafka
消费kafka不需要设置 压缩协议吗 假如生产者压缩协议是lz4
消费kafka不需要设置 压缩协议吗 假如生产者压缩协议是lz4
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
565 1
|
消息中间件 监控 Kafka
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
联通实时计算平台问题之Flink状态后端数据量较大时,问题排查要如何进行
257 1
|
存储 JSON Kubernetes
实时计算 Flink版操作报错合集之 写入hudi时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 分布式计算 Hadoop
实时计算 Flink版产品使用问题之建了一张upsert-kafka的flink表,但是数据为空,该如何排查
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 安全 Kafka
Kafka支持SSL/TLS协议技术深度解析
SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。这些协议在传输层对网络连接进行加密,确保数据在传输过程中不被窃取或篡改。
1396 0

热门文章

最新文章