Flink 如何处理背压

Posted @SmartSi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 如何处理背压相关的知识,希望对你有一定的参考价值。

传送门:Flink 系统性学习笔记


Flink 1.4 版本

人们经常会问 Flink 是如何处理背压的。答案很简单:Flink 不使用任何复杂的机制,因为它不需要任何处理机制。只凭借数据流引擎,就可以从容地应对背压。在这篇博文中,我们介绍一下背压。然后,深入了解 Flink 是如何在任务之间传送缓冲区中的数据,并展示流数传输自然双倍下降的背压机制。我们最终通过一个小实验展示这一点。

1. 什么是背压

像 Flink 这样的流处理系统需要能够从容地处理背压。背压是指系统在一个临时负载峰值期间接收数据的速率大于其处理速率的一种场景(可以理解为处理速度慢,接收速度快,系统处理不了接收的数据)。许多日常情况都会导致背压。例如,垃圾回收卡顿可能导致流入的数据堆积起来,或者数据源可能出现发送数据过快的峰值。如果处理不当,背压会导致资源耗尽,甚至导致数据丢失。

让我们看一个简单的例子。假设一个数据流管道包含一个数据源,一个流作业和一个 Sink,以每秒 500 万个元素的稳定速度处理数据,如下所示(一个黑条代表 100 万个元素,下图是系统某一秒的快照):

以上是关于Flink 如何处理背压的主要内容,如果未能解决你的问题,请参考以下文章

Flink 如何定位背压来源

如何处理 Kafka Connect Sink 中的背压?

Flink的处理背压​原理及问题-面试必备

flink的背压问题产生原因和解决方法

一次线上Flink 背压情况分析之重新认识java dump 文件

面试题:Flink反压机制及与Spark Streaming的区别