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

由于最终的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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
SQL 资源调度 Oracle
Flink CDC产品常见问题之sql运行中查看日志任务失败如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL 关系型数据库 MySQL
Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
【2月更文挑战第18天】Flink 提供了一种名为 Flink SQL 的查询语言,它支持多种数据库之间的 DDL 语句转换
171 2
|
1月前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
193 2
|
1月前
|
SQL 分布式计算 HIVE
基于 Kyuubi 实现分布式 Flink SQL 网关
本文整理自网易互娱资深开发工程师、Apache Kyuubi Committer 林小铂的《基于 Kyuubi 实现分布式 Flink SQL 网关》分享。
104457 64
基于 Kyuubi 实现分布式 Flink SQL 网关
|
1月前
|
存储 SQL Java
阿里Flink云服务提供了CDC(Change Data Capture)功能
【2月更文挑战第10天】阿里Flink云服务提供了CDC(Change Data Capture)功能
36 1
|
2月前
|
SQL 数据采集 JSON
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
125171 136
|
2月前
|
SQL 监控 API
Flink SQL支持写判断语句
【2月更文挑战第8天】Flink SQL支持写判断语句
236 12
|
2月前
|
SQL 消息中间件 Kafka
flink问题之做实时数仓sql保证分topic区有序如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
706 3
|
2月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
482 5
|
1月前
|
SQL Java API
官宣|Apache Flink 1.19 发布公告
Apache Flink PMC(项目管理委员)很高兴地宣布发布 Apache Flink 1.19.0。
1355 1
官宣|Apache Flink 1.19 发布公告

相关产品

  • 实时计算 Flink版