【Flink实战系列】Flink发生数据倾斜怎么优化任务?(两段聚合的方式)

本文介绍了Flink实时计算中遇到的数据倾斜问题及其对任务的影响,通过一个测试示例展示了数据倾斜的现象。为了解决这个问题,文章提出了使用两段聚合的方法,即在分组前为key添加随机前缀,首次聚合后再去除前缀进行第二次聚合。这种方法避免了数据倾斜导致的反压和检查点超时,同时确保了最终结果的准确性。
摘要由CSDN通过智能技术生成

在Flink实时计算的任务中,一个最常见的场景就是分组聚合,但是当key数量很少的时候就会发生数据倾斜,最近的一个任务就出现了这个问题,造成的结果就是反压,这个时候增加并发度是没有用的,因为key的个数没有变,还会造成ck超时失败.

我为了简化整个过程,写了一个测试的demo,数据倾斜的表现如下:

 上面图中显示只有一个key,key的数量远远小于并发实例的个数,所以只有一个并发在工作,其他的都是空闲的,不能很好的利用分布式,也浪费了大量的资源,在Flink里面怎么解决这个问题呢?

解决数据倾斜的核心就是打散key

不管是在spark还是flink里面都会遇到数据倾斜的问题,一种最常用的方式是给key加随机数,然后分开两次聚合,在spark里面经常这样解决,那Flink里面具体怎么实现呢?

数据倾斜前的代码我就不在贴了,非常的简单,直接贴一下解决后的代码,就是在分组前先给key加一个随机的前缀,聚合后把随机的前缀去掉,然后在聚合一次.具体实现看下面的代码

package flink.window

import java.util.Random
import com.alibaba.fastjson.JSON
import flink.table.Jason_Entity
import flink.util.Com
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JasonLee实时计算

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值