Flink SQL 功能解密系列 —— 解决热点问题的大杀器MiniBatch

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 在Blink的流式任务中,State相关的操作通常都会成为整个任务的性能瓶颈。实时计算部-查询和优化团队开发了MiniBatch功能,大幅降低了State操作的开销,在今年的双11中,几乎所有适用的任务都启用了MiniBatch功能。


阿里巴巴实时计算团队-墨简

在Blink的流式任务中,State相关的操作通常都会成为整个任务的性能瓶颈。实时计算部-查询和优化团队开发了MiniBatch功能,大幅降低了State操作的开销,在今年的双11中,几乎所有适用的任务都启用了MiniBatch功能。

MiniBatch的一个典型场景-无限流上的GroupBy

在Blink-SQL中,通常会使用无限流的GroupBy来完成去重或者聚合计算,一个简单的例子如下

SELECT a, count(b) FROM dual GROUP BY a

标准实现的计算方式

minibatch_new.png

MiniBatch实现的计算方式

minibatch_new2.png

StateBackend的Batch操作

从上图可知,开启MiniBatch之后要求State能支持Batch读写,目前默认的RocksDBStateBackend暂时不支持,Batch的读写实际是循环读写,而NiagaraStateBackend则支持真正的Batch读写。

用户的参数设置以及实现方案

目前用户在使用Bayes提交Blink-SQL任务时,可以设置以下两种触发逻辑

# 表示整个job允许的延迟(必须参数)
blink.miniBatch.allowLatencyMs=5000
# 单个batch的size(可选参数)
blink.miniBatch.size=1000
AI 代码解读

由于最终的SQL任务是一个DAG,需要在GroupBy节点上分配时间使得整个任务的在攒数据上的延迟不超过该值,目前时间分配的策略是简单地做均分,一个可能的例子如下
image.png

适用场景

当前MiniBatch支持Blink-SQL中的无限流GroupBy和无限流Proctime Over Window
如果Blink-SQL任务有热Key,则非常适合启用MiniBatch优化, 一些任务启用了MiniBatch,可以看出往下游发送的数据比原有少了约2个数量级

优化模型及后续

  • 从上可以看出现有的时间分配策略只是给了可行但不是最优的方案,Key的分布更密集的节点不一定分配到了更多的时间。
  • 完整MiniBatch的优化需要通过Key的分布,source节点输入速率, 节点处理能力等信息来计算每个节点的时间分配,在后续的版本中会结合HotUpdate功能做到动态调整,最大化发挥出MiniBatch的威力。
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
打赏
0
0
0
2
36030
分享
相关文章
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是为应对传统数据处理框架中流批分离的问题而诞生的,它融合了SQL的简洁性和Flink的强大流批处理能力,降低了大数据处理门槛。其核心工作原理包括生成逻辑执行计划、查询优化和构建算子树,确保高效执行。Flink SQL 支持过滤、投影、聚合、连接和窗口等常用算子,实现了流批一体处理,极大提高了开发效率和代码复用性。通过统一的API和语法,Flink SQL 能够灵活应对实时和离线数据分析场景,为企业提供强大的数据处理能力。
331 26
|
4月前
|
Flink SQL Deduplication 去重以及如何获取最新状态操作
Flink SQL Deduplication 是一种高效的数据去重功能,支持多种数据类型和灵活的配置选项。它通过哈希表、时间窗口和状态管理等技术实现去重,适用于流处理和批处理场景。本文介绍了其特性、原理、实际案例及源码分析,帮助读者更好地理解和应用这一功能。
260 14
【开发者评测】实时计算Flink场景实践和核心功能体验测评获奖名单公布!
【开发者评测】实时计算Flink场景实践和核心功能体验测评获奖名单公布!
135 1
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
281 6
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
80 0
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
9月前
|
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
231 13
|
9月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
140 9

相关产品

  • 实时计算 Flink版
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等