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

本文涉及的产品
实时计算 Flink 版,1000CU*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

由于最终的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日以线上峰会的形式与大家见面。
相关文章
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
783 43
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
280 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
4月前
|
SQL
SQL如何在CTE中使用Order By的功能
SQL Server如何在CTE中使用Order By的功能
|
4月前
|
SQL 消息中间件 Kafka
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是 Apache Flink 提供的 SQL 引擎,支持流批一体处理,统一操作流数据与批数据,具备高性能、低延迟、丰富数据源支持及标准 SQL 兼容性,适用于实时与离线数据分析。
857 1
|
SQL NoSQL Java
Flink SQL 问题之执行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
1099 2
|
SQL Java 关系型数据库
Flink SQL 问题之用代码执行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
1476 6
|
SQL 消息中间件 Oracle
Flink SQL 问题之写入ES报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
213 4
|
SQL JSON Java
Flink SQL 问题之重启报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
405 3
|
SQL 资源调度 分布式数据库
Flink SQL 问题之服务器报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
343 3
|
SQL 存储 数据处理
Flink SQL 问题之提交程序运行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
587 3

热门文章

最新文章

相关产品

  • 实时计算 Flink版