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

简介: 在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

由于最终的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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
5月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
914 43
|
5月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
373 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
6月前
|
SQL
SQL如何在CTE中使用Order By的功能
SQL Server如何在CTE中使用Order By的功能
|
6月前
|
SQL 消息中间件 Kafka
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是 Apache Flink 提供的 SQL 引擎,支持流批一体处理,统一操作流数据与批数据,具备高性能、低延迟、丰富数据源支持及标准 SQL 兼容性,适用于实时与离线数据分析。
1028 1
|
关系型数据库 MySQL 网络安全
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)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
590 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
407 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
286 6
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
1250 3
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
1265 1

热门文章

最新文章

相关产品

  • 实时计算 Flink版