痛点:假如我们在FLink的WebUI Metrics页面发现有一个SubTask每秒处理的数据明显比其他低,又或者在CheckPoint页面,发现有一个SubTask的CheckPoint时间明显比较长。有时候定位问题需要到TaskManager所在机器找到相应的Java进程使用jmap分析进程的内存使用或者jstack分析线程信息。现在问题来了,如果你知道某个SubTask已经有问题了,怎么快速找到该SubTask到底在哪台机器,哪个进程呢?
图1中可以看出Task “Flat Map -> Sink: Kafka Topic : pv-event”对应的SubTask11相对其他SubTask处理速率比较慢
图2中可以看出Task “Flat Map -> Sink: Kafka Topic : pv-event”对应的SubTask1相对其他SubTask执行CheckPoint很慢。这里有一点比较坑,Flink内所有的地方SubTask下标都是从0开始,但是这个CheckPoint页面,SubTask从1开始,所以这里显示的是SubTask1有问题,实际上是Task “Flat Map -> Sink: Kafka Topic : pv-event”的SubTask0有问题,这里我看了接口返回的数据也是从0开始,但是WebUI显示的时候进行了加1,我们解决问题的时候,必须要手动减1操作
接下来,教大家如何找到Task “Flat Map -> Sink: Kafka Topic : pv-event”对应的

当Flink的SubTask处理速度慢或CheckPoint时间过长时,需要快速定位问题SubTask所在的机器及进程。通过Flink WebUI获取Task的SubTask11(或实际为0)的问题,利用REST API获取TaskManager的vertex ID和机器端口信息,如dn218:20131。然后在目标服务器上用yarn用户执行命令找到对应TaskManager的pid,以便进行jmap或jstack分析。
最低0.47元/天 解锁文章
204

被折叠的 条评论
为什么被折叠?



