记一次Flink任务无限期INITIALIZING排查过程

1.前言

环境:Flink-1.16.1,部署模式:Flink On YARN,现象:Flink程序能正常提交到 YARN,Job状态是 RUNNING,而 Task状态一直处于 INITIALIZING ,如下图:

通过界面可以看到 flink任务一直没有执行,处于初始化状态,观察到初始化状态最长可持续 10几个小时。


补充:Flink On YARN模式如何打开 Flink任务监控页面。首先,打开 YARN任务管理界面(默认 8088端口),找到运行中的 flink任务,点击下图中的 ApplicationMaster即可。

2.通过大模型获取问题排查思路

笔者:Source: kafkaReader_3 -> router_4 -> (Sink: rdbWriter_6, Sink: kafkaWriter_8) 状态 INITIALIZING的原因

GPT:

在 Flink 中,INITIALIZING 状态表示作业的一个任务(task)正在初始化。具体到你提供的例子,Source: kafkaReader_3 -> router_4 -> (Sink: rdbWriter_6, Sink: kafkaWriter_8) 是一个任务链,包括一个 Kafka 数据源(kafkaReader_3)、一个数据处理算子(router_4),以及两个数据汇(Sink: rdbWriter_6 和 Sink: kafkaWriter_8)。

当任务启动时,它会经历一系列的状态转换,其中之一就是 INITIALIZING。这个状态表示任务正在进行初始化操作,例如创建连接、加载配置、准备资源等。在初始化完成后,任务会进入 RUNNING 状态,开始正常的数据处理和计算。

需要注意的是,INITIALIZING 状态只是任务的一个瞬时状态,表示任务正在初始化过程中。如果任务长时间停留在 INITIALIZING 状态,可能存在初始化过程出现问题的情况,例如资源不足、连接失败等。在正常情况下,任务应该尽快从 INITIALIZING 状态转移到 RUNNING 状态以继续执行数据处理逻辑。

因此,如果你的任务一直停留在 INITIALIZING 状态,建议检查相关的日志以了解初始化过程中是否发生了错误或异常。同时,还可以检查资源分配、网络连接等因素,以确保任务能够成功初始化并转移到 RUNNING 状态。

3.检查 YARN资源

打开 YARN任务监控页面,左侧 Nodes页面可以查看集群可用的计算节点个数,Scheduler页面可以看到队列资源占用情况,以及CPU和内存占用情况。

4.查看 JobManager和 TaskManager的日志

查看日志有两种方式:

  • 通过 flink任务监控页面

  • 通过 登录计算节点所在服务器

    shell 复制代码
    ll /home/yarn_data/log/application_1708676775521_0024/container_e07_1708676775521_0024_01_000002
    
    -rw-r--r-- 1 yarn ocdp  8907 Mar  7 11:41 directory.info
    -rw-r--r-- 1 yarn ocdp 18796 Mar  7 15:42 gc.log.0.current
    -rw-r----- 1 yarn ocdp 15772 Mar  7 11:41 launch_container.sh
    -rw-r--r-- 1 yarn ocdp     0 Mar  7 11:41 prelaunch.err
    -rw-r--r-- 1 yarn ocdp   100 Mar  7 11:41 prelaunch.out
    -rw-r--r-- 1 yarn ocdp  1270 Mar  7 11:41 taskmanager.err
    -rw-r--r-- 1 yarn ocdp 71955 Mar  7 11:46 taskmanager.log
    -rw-r--r-- 1 yarn ocdp 66686 Mar  7 11:46 taskmanager.out

5.查看 Flink程序堆栈信息

通过 flink任务监控页面查看 Thread Dump,如下图:

这里我把关键部分堆栈摘抄下来了:

json 复制代码
{
  "threadName": "Source: kafkaReader_3 -> router_4 -> (Sink: rdbWriter_6, Sink: kafkaWriter_8) (1/1)#0",
  "stringifiedThreadInfo": "\"Source: kafkaReader_3 -> router_4 -> (Sink: rdbWriter_6, Sink: kafkaWriter_8) (1/1)#0\" Id=72 WAITING on java.util.concurrent.CountDownLatch$Sync@6792895f\n\tat sun.misc.Unsafe.park(Native Method)\n\t-  waiting on java.util.concurrent.CountDownLatch$Sync@6792895f\n\tat java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)\n\tat java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)\n\tat java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)\n\tat java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)\n\tat java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)\n\tat org.apache.kafka.clients.producer.internals.TransactionalRequestResult.await(TransactionalRequestResult.java:50)\n\tat org.apache.kafka.clients.producer.KafkaProducer.initTransactions(KafkaProducer.java:569)\n\t...\n\n"
}

这里主要就是看线程名称为 任务名称的,比如这里就是:

Source: kafkaReader_3 -> router_4 -> (Sink: rdbWriter_6, Sink: kafkaWriter_8)

可以看到笔者编写的 flink程序阻塞的原因是:initTransactions,在初始化事务。

6.总结

如果碰到了 flink程序长时间处于初始化状态,比较可行的排查思路是:检查YARN计算资源查看 JobManager和 TaskManager的日志查看 flink程序堆栈信息。另外,可以把问题的尽量描述清楚,让大模型来分析可能的原因,并提供排查思路。

相关推荐
计算机学姐几秒前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
救救孩子把17 分钟前
深入理解 Java 对象的内存布局
java
落落落sss19 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节25 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭31 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由38 分钟前
速成java记录(上)
java·速成
bubble小拾41 分钟前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
一直学习永不止步44 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明44 分钟前
面试知识储备-多线程
java·面试·职场和发展
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节