算子信息
该模块主要提供任务运行的一些监控,包括算子/算子链的组成、数据延迟、数据读取写入、数据反压等情况
Vertex拓扑
通过分析实时任务代码与结构,平台在Vertex拓扑中展示了 Operator(算子)
和 Operator Chain(算子链)
两种不同层级的拓扑图展示。
Operator 算子
实时任务的基础元素,一个算子代表实时任务一个基础的处理过程。通过对代码及业务逻辑拆分为算子,用户能够直观查看到每一步处理过程中数据延迟、并行度、数据收发条数。
Operator Chain 算子链
Flink 默认会将能链接的算子尽可能地进行链接(例如, 两个 map 转换操作),链接在一起算子链可以同一个线程中执行,从而提升性能。
参数 | 说明 |
---|---|
Delay | 对应算子内数据延迟 |
Parallelism | 并行度,指算子链或算子的并行度。当前算子链与算子并行度保持一致。 |
Record Received | 当前算子/算子链接收到的数据条数。 |
Record Sent | 当前算子/算子链接发送的数据条数。 |
BackPressured | Flink反压系数。 |
反压(BackPressured)
- 什么是反压
当下游数据的处理速度跟不上上游数据的产生速度,就会产生反压。如下链路:
Task2的数据处理速率是1M/S,但是上游Task1的数据处理速率是5M/S。此时Flink就会将反压信号
发送给上游,上游就会对数据处理进行限速。导致整个链路的处理速率受一个节点的瓶颈限制。
反压会造成什么影响
- 整个链路数据处理速率变慢,数据延迟时长变大
- Checkpoint的生成速度变慢甚至超时
- Kafka数据堆积,无法被及时消费
如何发现反压情况
在Vertex拓扑图中,可以通过查看BackPressured指标分析反压情况。反压计算逻辑可以查看Flink官方解释。
反压程度 比例 显示颜色 OK 0 < 比例 < = 10% 蓝色 LOW 10% < 比例 < = 50% 黄色 HIGH 50% < 比例 < = 100% 红色 note当算子链内部存在任一算子出现反压情况,对应算子链也会产生颜色变化。
如何解决反压问题
- 查看各个TaskManager/SubTask是否存在数据倾斜的情况
- 调大任务的内存参数、并行度
- 将下游算子和上游算子设置相同并发度,自动形成算子链。(减少线程间切换和数据缓存开销;提高吞吐量且降低延迟)