1. 从业务上将key打散
2. 从flink技术上考虑优化
2.1 开启minibatch
开发minibatch:可以较少状态的读取次数,提高处理数据性能,从而缓解热点key带来的压力。
2.2 开启两阶段聚合
首先把分组的 key 打散,比如加随机后缀;
对打散后的数据进行聚合;
把打散的 key 还原为真正的 key;
二次 KeyBy 进行结果统计,然后输出。
2.3 GroupBy + Aggregation 分组聚合热点问题
将SQL 拆成了内外两层,第一层通过随机打散 100 份的方式减少数据热点,当然这个打散的方式可以根据业务灵活指定。
select date,
type,
sum(pv) as pv
from(
select
date,
type,
sum(count) as pv
from table
group by
date,
type,
floor(rand()*100) --随机打散成100份
)
group by
date,
type;
3. 参考资料
Flink面试常见问题(实战)_u011250186的博客-CSDN博客_flink问题