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

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

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

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

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

标准实现的计算方式

MiniBatch实现的计算方式

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节点上分配时间使得整个任务的在攒数据上的延迟不超过该值,目前时间分配的策略是简单地做均分,一个可能的例子如下

适用场景

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

优化模型及后续

  • 从上可以看出现有的时间分配策略只是给了可行但不是最优的方案,Key的分布更密集的节点不一定分配到了更多的时间。
  • 完整MiniBatch的优化需要通过Key的分布,source节点输入速率, 节点处理能力等信息来计算每个节点的时间分配,在后续的版本中会结合HotUpdate功能做到动态调整,最大化发挥出MiniBatch的威力。

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

  1. Flink SQL 功能解密系列 —— 维表 JOIN 与异步优化

    2019独角兽企业重金招聘Python工程师标准>>> 引子 流计算中一个常见的需求就是为数据流补齐字段.因为数据采集端采集到的数据往往比较有限,在做数据分析之前,就要先将所需的维度 ...

  2. Flink SQL 功能解密系列 —— 流式 TopN 挑战与实现

    TopN 是统计报表和大屏非常常见的功能,主要用来实时计算排行榜.流式的 TopN 不同于批处理的 TopN,它的特点是持续的在内存中按照某个统计指标(如出现次数)计算 TopN 排行榜,然后当排行榜 ...

  3. Flink SQL 核心解密 —— 提升吞吐的利器 MicroBatch

    Flink SQL 核心解密 -- 提升吞吐的利器 MicroBatch 之前我们在 Flink SQL 中支持了 MiniBatch, 在支持高吞吐场景发挥了重要作用.今年我们在 Flink SQL ...

  4. 实时计算 Flink SQL 核心功能解密

    2019独角兽企业重金招聘Python工程师标准>>> 实时计算 Flink SQL 核心功能解密 Flink SQL 是于2017年7月开始面向集团开放流计算服务的.虽然是一个非常 ...

  5. Echarts 添加横轴伸缩功能,并解决数据量过大情况下伸缩看起来错位问题,以及横坐标设置不同颜色,滑动时候文字颜色样式错位问题

    原有基础横轴伸缩功能 关键代码 dataZoom: [{type: 'inside',start: 0,end: 10},{start: 0,end: 10}], 完整代码,可以放到官方DEMO测试 ...

  6. 2020最全前端面试系列(浏览器原理)(最容易忽视的面试隐藏大杀器)

    2020前端面试系列(浏览器原理) 浏览器输入URL到返回页面的全过程 浏览器渲染步骤 重排和重绘 触发reflow情形 减少reflow方法 浏览器本地存储方案的比较 cookie localSto ...

  7. 获取返回值作为变量_解决多线程间共享变量线程安全问题的大杀器——ThreadLocal...

    微信公众号:Zhongger 我是Zhongger,一个在互联网行业摸鱼写代码的打工人! 关注我,了解更多你不知道的[Java后端]打工技巧.职场经验等- 上一期,讲到了关于线程死锁.用户进程.用户线 ...

  8. 解决多线程间共享变量线程安全问题的大杀器——ThreadLocal

    上一期,讲到了关于线程死锁.用户进程.用户线程的相关知识,不记得的小伙伴可以看看:字节跳动面试官问我:你知道线程死锁吗?用户线程.守护线程的概念与区别了解吗? 这期,我们来聊一聊一个在Java并发编程 ...

  9. 一次TOPN需求带来的历险-与Flink SQL的爱恨情仇

    背景 最近接到一个需求,算是一个比较常见的需求,我们公司的业务会涉及到直播,因此直播自然避免不了高并发的房间内发消息,因此业务端给出的需求就是:实时得为业务端提供近10s内的每个房间的消息总数TOP2 ...

最新文章

  1. 编写程序记录文件位置
  2. 计算机基础知识同步训练,计算机应用基础:全国高等教育自学考试同步辅导/同步训练(非计算机专业公共基础课)最新版...
  3. QRCode.js -- 用 Javascript 生产二维码
  4. 关于私有云与存储风向的深度解读
  5. 为什么作为开发人员面试完全是胡说八道
  6. 2个简单shell脚本(if,while,case语句)
  7. scanf(%d,%d,a,b)在c语言所代表的含义,在C语言中,有语句“inta,b;scanf(a=%db=%d,a,b);”,下.._简答题试题答案...
  8. Centos7.x 安装Kubernetes(K8s) 1.14.3 nginx 部署 案例
  9. 全球十九大主流卫星遥感数据下载平台
  10. Java教程(一)---JDK和Maven安装配置
  11. 最新的Sql笔试题及答案,部门表,用户表,客户信息表,订单表
  12. 单元测试 测试用例 用例测试文件golang的单元测试
  13. Java生态技术体系科普
  14. 温度控制pid c语言程序,51单片机温度PID算法(C程序)
  15. bamboo 启动报错,无法正常访问
  16. 随手写的QT程序:文件大小转化可读字符串,整数转 B,KB,MB......
  17. python+django大学教室自习室预约管理系统
  18. 骨传导耳机是什么意思?骨传导耳机工作原理是什么
  19. 现货跌期货涨(现货大涨期货就大涨吗)
  20. 有激励果效的座右铭大全

热门文章

  1. oracle运行企业管理器,如何打开Oracle 10g的企业管理器(Enterprise Manager)?
  2. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树
  3. 第十六届全国大学生智能车竞赛航天智慧物流竞赛成绩与奖项
  4. 来自于参赛队伍所反映的总决赛落选之后的建议
  5. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  6. 三关节机械臂上的传感器 、执行器与控制板STM32F103连接
  7. 基于STC8G1K17的信号转换方案
  8. mysql 只允许本地登陆 centos,Centos中MySQL设置密码跟不允许匿名登陆
  9. python之33个关键字详解_Python 中的关键字 with 详解
  10. 王者传奇服务器维护一般多长时间,9377王者传奇合理分配刷图时间其实很重要...