首页 > 其他分享 >Flink 积压问题排查

Flink 积压问题排查

时间:2023-02-13 00:55:32浏览次数:42  
标签:task 积压 Flink 作业 反压 排查 sink

Flink 作业运行时,最常见的问题就是积压问题, 当作业出现积压时,如何才能快速定位到积压原因,并针对性解决呢?

积压的发现

通过我们会通过配置作业的积压报警来及时发现作用的积压情况,下面是一些常用的积压监控指标:

freshness

freshness 一般代表当前消费的消息体时间和当前时刻的差值,如果差值越大,说明积压也就越严重。
无论是消息队列还是数据湖,消息体本身就带有时间戳,因此可以非常方便计算当前消费的消息时间戳和当前时间的差值。

offsetLag

积压的条目数,适用于消息队列, 一般指当前消费的位点和相比消息队列的头节点的 offset 差值。

snapshotLag

snapshot 积压的个数,适用于数据湖,代表当前消费的 snapshot 和最新的 snapshot 版本的差异数量

splitLag

剩余的 split 数量,适用于数据湖, 代表剩余待消费的分片数量

积压问题的排查

反压排查时,一般分为两步:

  1. 发现存在积压的 task
  2. 结合 jstack 造成积压的具体原因

发现积压的 task

通常有多种手段来找到积压的 task

inpoolUsage/outpoolUsage
An estimate of the input/output buffers usage. (ignores LocalInputChannels)

一般情况下, 有这个一个原则:

  1. inpool 高的 task 处理比较慢 (可能原因:1. 自身处理慢 2. 下游处理慢导致反压)
  2. outpool 高的 task 下游处理比较慢

反压
If you see a back pressure warning (e.g. High) for a task, this means that it is producing data faster than the downstream operators can consume. Records in your job flow downstream (e.g. from sources to sinks) and back pressure is propagated in the opposite direction, up the stream.

通常如果 task 存在反压,并不是这个 task 处理慢了, 而是他的下游太慢,因此当作业存在多个 task 时, 反压是连续的,直到慢节点
如下图所示:一般情况是 task1, task2, task3 的反压比较高,从 task4 开始降低,则基本可以判断 task4 处理比较慢

checkpoint

数据积压通常会导致 checkpoint 超时, 因此通过 checkpoint 的耗时情况,也能反映出作业处理速度的快慢,从而能够定位到处理比较耗时的 task 。

结合 stack 分析原因

当找到了可能存在积压的 task 之后,再结合 stack 进一步确定原因。

常见的原因:

状态访问比较慢(rocksdb)

常见于使用 Rocksdb 的作业, 状态量比较大,作业的 stack 经常

GC 严重

针对不同的 statebackend, 常见的原因大不相同

  1. 使用 Rocksdb 的作业,确定主要占用在哪里(业务逻辑占用,broadcast state 占用),结合实际的需求,扩充堆内内存。

  2. 使用 Filesystem 的作业, 有较大概率是状态量增加,导致堆内内存不足,导致频繁 GC,及时扩内存即可

外部系统访问比较慢

在 Flink 作业中, 一般使用三种方式访问外部系统:source,sink,维度表

source
常见两种提速手段:

  1. 扩 source partition的个数
  2. 扩 source task 的并发数

sink
常见三种提速手段:

  1. 扩 sink 表的 partition
  2. 扩 sink task 的并发
  3. sink 修改逻辑, 使用异步 io

维度表
常见两种提速手段

  1. 扩 join 算子的并发
  2. 采用异步 join方式,提升 join 速度

作业处理达到瓶颈
一般 Flink 的 task 处理速度在 2~3w, 处理快的5~6w, 因此如果单个 task 的处理速度在预期范围, 但依然出现了积压, 则可以需要考虑扩容。

标签:task,积压,Flink,作业,反压,排查,sink
From: https://www.cnblogs.com/0x12345678/p/17115096.html

相关文章

  • 【Flink】详解JobGraph
    ​ 【Flink】详解JobGraph大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!概述JobGraph......
  • java 接口返回空指针问题排查
    java接口返回空指针问题排查问题现象现象:业务流程都能通,数据也正常,就是接口返回【空指针异常】排查:postman接口调用测试,返回200PHP项目中调用接口,返回400空指针异常......
  • 一次生产环境CPU占用高的排查
    1.项目背景甲方是保密级别非常高的政府部门。所以我们全程拿不到任何测试数据,只能是自己模拟数据进行测试。项目部署的时候,公司派了一人到甲方现场,在甲方客户全程监督下......
  • mq问题排查 (队列有没有监听的人,交换机有没有绑定队列)
     发送消息  打断点能进入    监听接收消息这里打断点,发现没有消息接受  支付结果监听这里没有消费者在监听   检查交换机是否和队列已经绑定......
  • linux常见问题排查
    查看用户账号#查看系统所有用户cut--delimiter:--fields1/etc/passwd或者cut-d:-f1/etc/passwd#查看拥有特殊权限的用户awk-F:'$3==0{print$1}'/et......
  • 记录一个排查oom思路
    一、背景客户反馈系统白屏,同时运维反馈内存占用多。项目包括数据库等,是部署在不同docker里的二、查linux日志是linux将mysql杀掉了egrep-i-r'killedprocess'/var/l......
  • docker容器ping不通宿主机与外网问题排查及解决
    一台虚拟机里突然遇到docker容器一直重启,看了下logs,发现是访问外网失败引起的,网上看到这个解决方案,这边记录一下。首先需要明确docker的网桥模式,网桥工作在二层(OSI堆栈),是通......
  • 记录一次排查log4cxx库按照日期回滚,不创建新目录的BUG
    目录1、背景2、排查步骤2.1、错误代码定位2.2、问题猜测2.3、错误代码分析2.4、错误原因3、解决方法1、背景C++项目,使用了log4cxx日志库,版本为:0.10.0项目中需要按照......
  • 开发&运维如何对接口响应时间慢问题,快速定界排查?
    01问题背景自建机房,生产环境上某接口耗时超过2s,接口实现逻辑包含:数据库读写下游api调用数据统计开发本地自测,接口耗时却只有106ms。于是开发问运维:“生产环境的网络确定没......
  • 消息队列的延时以及过期失效,消息队列消息积压及占满问题解决思路
    大量消息在mq里积压了几个小时了还没解决几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上11点多。这个是我们真实遇到过的一个场景,确实是线上故障了......