反压是在Flink实时数据处理中经常遇到的问题,是在实时数据流的管道某个节点上游产生数据的速度大于该节点处理数据速度出现瓶颈。反压会从该节点向上游传递,一直到数据源,并降低数据源的摄入速度。这在流数据处理中非常常见,很多场景可以导致反压的出现,比如, GC导致短时间数据积压,数据的波动带来的一段时间内需处理的数据量有突增,任务负载大节点内存CPU使用率较高,以及任务checkpoint本身异常都可能造成反压。
具体到flink任务上查看,出现反压的时候,在flink UI上可以看到一个 task 发生反压警告,意味着它生产数据的速率比下游 task 消费数据的速率要快。 在工作流中数据记录是从上游向下游流动的(例如:从 Source 到 Sink)。
以一个简单的 Source -> Sink job 为例。如果看到 Source 发生了警告,意味着Sink 消费数据的速率比 Source 生产数据的速率要慢。 Sink 正在向上游的 Source算子产生反压。
在Flink WebUI 集合了所有 subTasks 的反压和繁忙指标的最大值,并在 Job-Graph 中将集合的值进行显示。除了显示原始的数值,tasks 也用颜色进行了标记,使检查更加容易。闲置的 tasks 为蓝色,完全被反压的 tasks 为黑色,完全繁忙的tasks 被标记为红色。 中间的所有值都表示为这三种颜色之间的过渡色。
在Job Overview 旁的 Back Pressure 选项卡中,可以具体看到当前节点的backpressured(反压)和Busy情况来具体判断节点的反压情况。
如果你看到 subtasks 的状态为 OK 表示没有反压。HIGH 表示这个 subtask 被反压。状态用如下定义:
•OK: 0% <= 反压比例 <= 10%
•LOW: 10% < 反压比例 <= 50%
•HIGH: 50% < 反压比例 <= 100%
除此之外,你还可以找到每一个 subtask 被反压、闲置或是繁忙的时间百分比。
以上内容摘自《企业级云原生白皮书项目实战》电子书,点击https://developer.aliyun.com/ebook/download/7774可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。