FLink聚合性能优化--MiniBatch分析

本文深入探讨Flink的MiniBatch聚合优化,包括MiniBatch的演进思路、适用场景、与普通聚合的对比。重点阐述MiniBatch在SQL语句中的应用,如window agg、group agg和over agg,并详细介绍了Local-Global聚合、Partial-Final聚合和Incremental增量聚合三种优化手段。此外,还讲解了如何通过配置开启和调整MiniBatch,以提升Flink的性能和吞吐量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

一、MiniBatch的演进思路

1、MiniBatch版本

2、适用场景

3、普通聚合与MiniBatch聚合对比

A、Simple Aggregation普通聚合

B、MiniBatch Aggregation微批聚合

二、MiniBatch作用的SQL语句

分类1、 window agg

分类2、group agg

分类3、over agg

三、MiniBatch三类优化手段

1、Local-Global聚合(本地-全局聚合)

2、Partial-Final聚合(解决COUNT DISTINCT热点问题)

3、Incremental增量聚合

四、如何开启MiniBatch

1、table.exec.mini-batch.enabled

2、table.exec.mini-batch.allow-latency

3、table.exec.mini-batch.size

4、table.optimizer.reuse-sub-plan-enabled

猜您喜欢& 往期精选▼


一、MiniBatch的演进思路

1、MiniBatch版本

Flink 1.9.0 SQL(Blink Planner) 性能优化中一项重要的改进就是升级了微批模型,即 MiniBatch(也称作MicroBatch或MiniBatch2.0),在支持高吞吐场景发挥了重要作用。

MiniBatch与早期的MiniBatch1.0在微批的触发机制略有不同。原理同样是缓存一定的数据后再触发处理,以减少对State的访问,从而提升吞吐和减少数据的输出量

MiniBatch与早期的MiniBatch1.0对比如下:
1、MiniBatch1.0主要依靠在每个Task上注册的Timer线程来触发微批,需要消耗一定的线程调度性能。
2、MiniBatch是MiniBatch1.0的升级版,主要要基于事件消息来触发微批,事件消息会按您指定的时间间隔在源头插入。MiniBatch在元素序列化效率、反压表现、吞吐和延迟性能上都要优于胜于MiniBatch1.0

2、适用场景

微批处理是增加延迟来换取高吞吐的策略,如果您有超低延迟的要求,不建议开启微批处理。通常对于聚合的场景,微批处理可以显著的提升系统性能,建议开启。

3、普通聚合与MiniBatch聚合对比

A、Simple Aggregation普通聚合

在未开启任何聚合优化前,执行SQL():

SELECT key, SUM(value) FROM T GROUP BY key

当未开启 MicroBatch 时,Aggregate 的处理模式是每来一条数据,查询一次状态,进行聚合计算,然后写入一次状态。当有 4条数据时,需要操作 2*4 次状态

在这里插入图片描述

B、MiniBatch Aggregation微批聚合

当开启 MicroBatch 时,对于缓存下来的 N 条数据一起触发,同 key 的数据只会读写状态一次。例如下缓存的 4 条 A 的记录,只会对状态读写各一次。所以当数据的 key 的重复率越大,攒批的大小越大,那么对状态的访问会越少,得到的吞吐量越高。

在这里插入图片描述

二、MiniBatch作用的SQL语句

MiniBatch主要作用于聚合(Group By)语句中,且不带window的场景(即分类2)。
我们先看下聚合分类:

分类1、 window agg

示例:select count(a) from t group by tumble(ts, interval ’10’ second), b
解析:以10秒翻转窗口和字段b聚合,MiniBatch不能作用的场景

分类2、group agg

示例:select count(a) from t group by b
解析:以字段a聚合,MiniBatch可以作用的场景

分类3、over agg

示例:select count(a) over (partition by b order by c) from t
解析:over window,MiniBatch不能作用的场景

三、MiniBatch三类优化手段

上一章节我们说明了MiniBatch只能作用于分类2(group aggregate且不带window场景),这个聚合场景下,微批处理具有三类优化手段:

  • Local-Global聚合(本地-全局聚合)
  • Partial-Final聚合(解决COUNT DISTINCT热点问题)
  • Incremental增量聚合

1、Local-Global聚合(本地-全局聚合)

Local-Global聚合优化与Spark Structrued Streaming聚合思路类似:

  • 上游节点本地攒一批数据进行聚合(localAgg),并输出这次微批的增量值(Accumulator)
  • 第二阶段再将收到的Accumulator合并(merge),得到最终的结果(globalAgg)
  • 原理图解:
    LocalGlobal本质上能够靠localAgg的预聚合筛除部分倾斜数据,从而降低globalAgg的热点,提升性能。可以结合下图理解LocalGlobal如何解决数据倾斜的问题
  • 适用场景:
    LocalGlobal适用于提升如SUM、COUNT、MAX、MIN和AVG等普通聚合的性能,能提高算子吞吐量,也能有效解决常见数据热点问题

在这里插入图片描述

  • 源码Rule规则:TwoStageOptimizedAggregateRule(两阶段聚合规则)
  • 物理计划算子:上述规则内部#createTwoStageAgg()创建了StreamExecLocalGroupAggregate、StreamExecGlobalGroupAggregate物理计划节点,分别对应Local、Global微批聚合实现
  • 实现函数Fuction:MiniBatchL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值