当前位置: 首页 > news >正文

FlinkSql通用调优策略

历史文章迁移,稍后整理

使用DataGenerator 提前进行压测,了解数据的处理瓶颈、性能测试和消费能力

开启minibatch:"table.exec.mini-batch.enabled", "true"

开启Local+Global 两阶段聚合:"table.exec.mini-batch.enabled", "true"

解决数据倾斜问题:

流式倾斜,开启minibatch

窗口类有界操作,传统的两阶段聚合的方式

数据源分布就不均匀,做reblance

针对大状态开启rocksdb

针对分区无数据导致watermark的窗口等不触发,设置idle

利用paimon做中间存储,既可以做批流复用olap,lookup join 时把全量数据拉到rocksdb并且是分片存的,效率很高,缺点是有延迟,会有join key miss的问题

暴力调优,加内存,调大并行度

设置空闲 State 保留时间 ,看情况,设置不当会影响结果正确性

FlinkSql 可以指定空闲状态(即未更新的状态)被保留的最小时间,当状态中的某个 Key 对应的状态未更新的时间达到阈值时,这条状态会被自动清理

4.2 开启 MiniBatch

Flink 是流式数据处理,没过来一条数据就会被直接处理

MiniBatch 是把流处理变为微批处理的方式,先缓存一定的数据后在触发处理,这样可以减少对 State 的访问、提升吞吐、有效减少输出数据量

但是会牺牲低延迟,对超低延迟要求的场景不建议用,常用在需要聚合的场景,有显著的性能提升

// 开启 miniBatch
configuration.setString("table.exec.mini-batch.enabled", "true");
// 批量输出的间隔时间
configuration.setString("table.exec.mini-batch.allow-latency", "5 s");
// 防止 OOM 设置每个批次最多缓存数据的条数,可以设为 2 万条
configuration.setString("table.exec.mini-batch.size", "20000");

主要是依靠每个 Task 上注册的 Timer 线程(Flink 的定时器)来触发微批,当然了,是需要消耗一定的线程性能 

 4.3 开启 LocalGlobal

其实就是本地聚合(Spark 的 reduceByKey 和 MR 的 Combine),所以开启 LocalGlobal 必须开启 MiniBatch,可以有效解决SUM的那个聚合函数数据倾斜的问题,同时还能优化上游对下游的数据传输、以及下游聚合的压力

// 开启 LocalGlobal
configuration.setString("table.optimizer.agg-phase-strategy", "TWO_PHASE");

如下图,红色和紫色分别代表两个 Key 的数据进行聚合时的效果

 4.4 开启 Split Distinct

LocalGlobal 的方式可以有效解决 SUM 等聚合函数数据倾斜的问题,但是对于 Group 后的 Count ( Distinct )的热点问题没法解决

1. 以前我们手动打散的方案

SELECT a, SUM(cnt)
FROM (
SELECT a, COUNT(DISTINCT b) as cnt
FROM T
GROUP BY a, MOD(HASH_CODE(b), 1024)
)
GROUP BY a

2. FlinkSql 自动实现了这部分功能,只需要我们开启 Split Distinct 参数即可

// 设置参数:(要结合 minibatch 一起使用)
// 开启 Split Distinct
configuration.setString("table.optimizer.distinct-agg.split.enabled", "true");
// 第一层打散的 bucket 数目
configuration.setString("table.optimizer.distinct-agg.split.bucket-num", "1024");

原理如下图,红色和紫色仍然分别代表两个 Key 的数据,但是红色的数据显然很多,但是去重必须同一个 Key 的数据肯定在一个节点,所以压力较大

4.5 Count ( Distinct ) 时可以用 Filter 代替 Case When

我们经常会写这样的 Sql,如下会有 3 个状态实例

SELECT
a,
COUNT(DISTINCT b) AS total_b,
COUNT(DISTINCT CASE WHEN c IN ('A', 'B') THEN b ELSE NULL END) AS AB_b,
COUNT(DISTINCT CASE WHEN c IN ('C', 'D') THEN b ELSE NULL END) AS CD_b
FROM T
GROUP BY a

而 FlinkSql 的优化器可以识别同一唯一键的不同 Filter 参数,三个 COUNT DISTINCT 都作用在 b 列上,我们可以利用 Filter 的这一特性,Flink 可以只使用一个共享状态实例,可减少状态的大小和对状态的访问

SELECT
a,
COUNT(DISTINCT b) AS total_b,
COUNT(DISTINCT b) FILTER (WHERE c IN ('A', 'B')) AS AB_b,
COUNT(DISTINCT b) FILTER (WHERE c IN ('C', 'D')) AS CD_b
FROM T
GROUP BY a

解决数据倾斜、反压问题

lookup join 的优化,避免性能较差的热查询

paimon属于链路的优化,既可以数据重用,重写了lookup join 减少checkpoint压力,缺点是...

FlinkSql window tvf 本身也是一种优化

当使用细粒度的滑动窗口(窗口长度远远大于滑动步长)时,重叠的窗口过多,一个数据会属于多个窗口,性能会急剧下降

比如 24h 的窗口,3分钟滑动一次,那么粒度就是 24 * 60 / 3 = 480 ,会导致两个问题

1. 状态

对于一个元素,将其对应的(key,window)写入 WindowState,那意味着每个元素到来,更新 WindowState 时都要遍历 480 个窗口然后写入,开销很大,即使用 RocksDBStateBackend 瓶颈也很明显

2. 定时器

了解过窗口函数原理的应该清楚,每一个(key,window)都需要注册两个定时器,而细粒度窗口会导致维护的定时器增多,加重内存负担

 一个是触发器注册的定时器,用于决定窗口数据何时输出
第二个是 registerCleanupTimer() 注册的一个清理定时器,用于窗口过期(比如 allowedLateness 过期)之后及时清理窗口的内部状态

这些都是通用的,很多时候其实这些方式解决不了,可以根据实际业务去探索某个业务的最佳方式

另外有时基于海量数据和业务要求的时效性和复杂度经常需要用到算子来处理

相关文章:

FlinkSql通用调优策略

历史文章迁移,稍后整理 使用DataGenerator 提前进行压测,了解数据的处理瓶颈、性能测试和消费能力 开启minibatch:"table.exec.mini-batch.enabled", "true" 开启LocalGlobal 两阶段聚合:"table.exec.m…...

Linux在云计算领域的重要作用

在云计算领域,Linux扮演着至关重要的角色。以下是Linux在云计算领域中的重要作用: 稳定性和安全性:Linux操作系统具有稳定性和安全性,可以有效地保护用户的数据安全。它具有各种安全功能,可以防止未经授权的访问&…...

sqlserver2012 解决日志大的问题 bat脚本

要解决SQL Server 2012中事务日志过大的问题,你可以创建一个批处理脚本(.bat)来定期备份事务日志。下面是一个示例批处理脚本,该脚本使用SQLCMD工具来执行事务日志备份: echo off set "DBNAMEYourDatabaseName&qu…...

SpringCloud之Eureka注册中心和负载均衡

SpringCloud之Eureka注册中心和负载均衡 微服务技术栈认识微服务单体架构分布式架构微服务 微服务拆分及远程调用微服务拆分注意事项 Eureka注册中心提供者与消费者原理分析服务调用出现的问题Eureka的作用 使用流程1、搭建EurekaServer2、注册user-service3、在order-service完…...

Python 数据可视化之山脊线图 Ridgeline Plots

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 JoyPy 是一个基于 matplotlib pandas 的单功能 Python 包,它的唯一目的是绘制山脊线图 Joyplots(也称为 Ridgeline Plots&…...

VTK 三维场景的基本要素(相机) vtkCamera 相机的运动

相机的运动 当物体在处于静止位置时,相机可以在物体周围移动,摄取不同角度的图像 移动 移动分为相机的移动,和相机焦点的移动;移动改变了相机相对焦点的位置,离焦点更近或者更远;这样就会改变被渲染的物体…...

C++ //练习 6.53 说明下列每组声明中的第二条语句会产生什么影响,并指出哪些不合法(如果有的话)。

C Primer(第5版) 练习 6.53 练习 6.53 说明下列每组声明中的第二条语句会产生什么影响,并指出哪些不合法(如果有的话)。 (a) int calc(int &, int &);int calc(const int &, const int &); (b) int …...

缓慢变化维 常用的处理方法

什么是缓慢变化维 维度 在数仓中,表往往会被划分成两种类型,一种是 事实表,另一种是维度表,举个例子,比如说: ❝ 2024年2月14日,健鑫在12306上买了两张火车票,每张火车票400元&…...

free pascal:fpwebview 组件通过JSBridge调用本机TTS

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\js_bidir 学习 js_bidir.lpr ,编写 js_bind_speak.lpr 如下,通过JSBridge调用本机…...

C语言静态库深入剖析

在C语言编程实践中,库是代码复用和模块化开发的重要基础结构。静态库作为其中一种主要的库类型,其内容在编译链接阶段即被完整地嵌入到最终生成的可执行文件中,从而使得程序在运行时无需外部依赖。本篇博客将系统性、详细地剖析C语言静态库的…...

A股上市以来涨幅排行榜

一、统计数据说明 1. 涨幅排行榜是根据股价的后复权价格计算的,该价格考虑了分红送股拆股等事件对股价的影响,相当于是分红再投资的股价。 2. 年化投资收益率,是根据IPO收盘价至今涨幅计算的复合年化收益率。例如,假设一个股票上…...

鸿蒙开发系列教程(十八)--页面内动画(1)

页面内的动画 显示动画 语法:animateTo(value: AnimateParam, event: () > void): void 第一个参数指定动画参数 第二个参数为动画的闭包函数。 如:animateTo({ duration: 1000, curve: Curve.EaseInOut }, () > {动画代码}) dura…...

Web基础01-HTML+CSS

目录 一、HTML 1.概述 2.html结构解析 3.HTML标签分类 4.HTML标签关系 5.HTML空元素 6.HTML属性 7.常用标签 (1)HTML标签 (2)标题标签 (3)换/折行标签 (4)段落标签 &am…...

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图: linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…...

蓝桥杯嵌入式第11届真题(完成) STM32G431

蓝桥杯嵌入式第11届真题(完成) STM32G431 题目 代码 程序和之前的大同小异,不过多解释 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief :…...

ChatGPT高效提问—prompt实践(教师助手)

ChatGPT高效提问—prompt实践(教师助手) 下面来看看ChatGPT在教育领域有什么用途。 首先设定ChatGPT的角色为高中教师助手。 输入prompt: ChatGPT输出: ​ 教师助手的角色已经设置完成。下面通过几种不同的情景演示如何使用。 1.1.1 制定…...

AI绘画作品的展示和变现-2

4.7 制作红包封面 中国的节日和传统文化元素仍然可以成为创作者们的创作灵感,创造出更多的变现机会。比如元宵节,可以制作大型元宵图案,进行引流并卖出元宵。 而春分、谷雨等节气也可以成为创作的灵感来源,创作出与之相关的图案&…...

Linux---网络套接字

端口号 端口号 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用 在公网上,IP地址能表示唯一的一台主机&…...

前端vue 数字 字符串 丢失精度问题

1.问题 后端返回的数据 是这样的 一个字符串类型的数据 前端要想显示这个 肯定需要使用Json.parse() 转换一下 但是 目前有一个问题 转换的确可以 showId:1206381711026823172 有一个这样的字段 转换了以后 发现 字段成了1206381711026823200 精度直接丢了 原本的数据…...

智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助

今天分享的是智能汽车系列深度研究报告:《智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助》。 (报告出品方:开源证券) 报告共计:43页 视觉感知最佳辅助——4D 成像毫米波雷达 感知是自动…...

工业无线通信实战:基于IO-Link Wireless模块的传感器开发指南

1. 项目概述:当无线通信遇上工业传感器在工业自动化领域,设备间的通信就像工厂的神经系统,而传感器和执行器就是最末梢的触觉和肌肉。传统上,这些“神经末梢”通过有线方式连接,一根根电缆如同血管,虽然可靠…...

企业级应用如何通过taotoken统一管理多个大模型api调用与成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过Taotoken统一管理多个大模型API调用与成本 对于需要集成多种大语言模型的企业技术团队而言,直接对接…...

LM317电源模块的“隐藏参数”与实战避坑:为什么你的空载电压总是不稳?

LM317电源模块的“隐藏参数”与实战避坑:为什么你的空载电压总是不稳? 在电子设计领域,LM317作为经典的可调线性稳压器,几乎出现在每个工程师的备件库中。但当你按照标准电路搭好原型,却发现空载时输出电压飘忽不定——…...

用emWin定时器给你的STM32 GUI界面“注入灵魂”:实现动态数据刷新与简易动画(基于WM_TIMER消息)

用emWin定时器为STM32 GUI注入动态交互的灵魂 在嵌入式设备的人机交互设计中,静态界面往往给人呆板的印象。想象一下工业仪表盘上凝固的数字,或是医疗设备上永不变化的指示灯——这种缺乏生命力的呈现方式不仅降低用户体验,还可能掩盖关键数据…...

git讲解,git vscode 对应,git pycharm 对应

文章目录安装git配置git什么是git 仓库创建版本库git addvscodegit statusgit addgit statuspycharm变更列表视图如果创建文件的时候选择了添加到git版本控制暂存区域视图时光穿梭机版本回退修改文件vscodepycharm变更列表暂存区域git logvscodepycharmgit reset 版本回退git r…...

技术解密:如何从零构建开源贴片机的完整指南

技术解密:如何从零构建开源贴片机的完整指南 【免费下载链接】lumenpnp The LumenPnP is an open source pick and place machine. 项目地址: https://gitcode.com/gh_mirrors/lu/lumenpnp 在电子制造领域,贴片机一直是小型创客和硬件开发者难以企…...

WebSocket 库存实时监控实战(Java 服务端 + 前端)

目录 一、技术选型 二、搭建 Spring Boot 服务端 1. 创建项目 & 引入依赖 2. WebSocket 配置类 3. 库存实体类(库存 预警规则) 4. WebSocket 服务端核心代码 5. 提供接口:手动修改库存并推送 6. 启动类 三、前端页面&#xff0…...

别再手动拼接数据了!用ONNXRuntime和TensorRT实现多Batch推理的Python/C++实战对比

多Batch推理实战:ONNXRuntime与TensorRT的高效对决 在计算机视觉项目的实际部署中,我们常常会遇到这样的场景:摄像头持续采集图像,或者需要同时处理来自多个传感器的数据。如果每次只处理单张图片,就像用吸管喝一大桶…...

从 API 调用到工具链:梳理 AI 介入测试流程的 5 个成熟度等级

2026年,AI正在以前所未有的速度重构软件测试行业。但“AI测试”并非一个开关——从简单调用ChatGPT生成几条用例,到构建完整的Agent自愈测试体系,中间存在一条清晰的能力进化路径。本文将这条路径梳理为5个成熟度等级,结合2026年最新工具、开源项目与行业数据,帮你准确评估…...

3分钟快速激活Windows和Office:KMS智能激活工具终极指南

3分钟快速激活Windows和Office:KMS智能激活工具终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然变成…...