Flink数据倾斜?到底啥意思?
大数据不怕数据大,分布式架构数据倾斜才是影响作业的罪魁祸首
数据倾斜是分布式计算中常见的问题,会严重影响作业性能。
数据倾斜场景
场景一:上游分区数据倾斜
上游 Kafka消息队列 各分区数据存在不均匀,在没有 keyBy 操作的情况下,有的分区数据量大,有的小。
场景二:keyBy 分区倾斜
在一些业务场景下,需要对某个字段进行 keyBy
数据倾斜影响
对于分布式的计算系统来说,不怕数据量大,就怕数据倾斜。因为分布式计算是将大数据集合拆成若干个小的数据集,在多个计算实例上执行计算逻辑,最终汇总计算结果,如果存在热点数据,导致某一个计算实例分配到的数据量远大于其他计算实例,那么整体的计算瓶颈就集中在该单节点上,类似于"木桶原理",最短的木块决定这个桶能装多少水。
(1)慢节点问题
数据集中在某些分区上(Subtask),导致数据严重不平衡,数据量大的节点处理速度慢,引发背压,checkpoint 连续失败等等。
(2)GC 频繁
过多的数据集中在某些 JVM(TaskManager),使得 JVM 的内存资源短缺,导致频繁 GC,导致延迟增大,吞吐下降。
(3)系统崩溃
严重情况下,单节点过大的数据可能突破该节点内存上限导致节点被kill,或者过长的 GC 导致 TaskManager 失联,可能影响系统内部崩溃。
如何定位
- 通过 Flink Web UI 各个 SubTasks/TaskManagers 的 Records Sent 和 Records Received 来确认。
这种单个节点数据量明显高于其他节点的,即存在数据倾斜情况。
通过 Checkpoint detail 里不同的 SubTask 的 Checkpointed Data Size 来判断是否数据倾斜。
感觉不错的宝宝可以送个花哈~ 感谢感谢~~
---点击下方送朵花按钮---
![](https://static.nowcoder.com/images/vote-placeholder.png)