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

增加并行度后,发现Flink窗口不会计算的问题。

文章目录

  • 前言
  • 一、现象
  • 二、结论
  • 三、解决


前言

窗口没有关闭计算的问题,一直困扰了很久,经过多次验证,确定了问题的根源。


一、现象

Flink使用了window,同时使用了watermark ,并且还设置了较高的并行度。生产是设置了300的并行度,并且接入了几十个topic ,这个地方划重点,后面会提到。结果就是,窗口没有关闭进行计算。于是我查阅的相关文档,得到的答案是因为配置的源并行度大于topic的分区数而导致。这个答案只能说很接近,而且我最开始也觉得很有道理。
解释一下watermark + window的原理

在这里插入图片描述
可以看到前面三个窗口里面都有数据,窗口触发计算的其中一个必要条件是最新的数据没过最低的水位线,就进行计算,认为不会再有乱序的数据进来了。但是从图中我们可以看到其中一个窗口一个数据都没有,就会导致拿不到所有窗口的最低水位线。因此也就无法触发计算。
为了验证这一法则
我在测试环境配置了一个并行度为10的程序,topic只有一个分区,启动任务的时候,我信誓旦旦地保证这不可能关闭窗口进行计算,然而,现实狠狠打了我一巴掌,窗口结果算出来了。虽然只是三言两语,实际上我做了很多尝试,只是其他的实验不重要,都是证明我是错的

于是通过比较的方法,想到和生产的情况不同就在于,生产消费了几十个topic,而我的测试只有一个topic,于是我再次坚信,问题一定就在这了。

我直接在idea进行测试
在这里插入图片描述

我配置了两个topic,并且在一开始只往第一个topic中写数据,而第二个topic不写数据

很好,跑了一整个中午,一次窗口聚合计算都没有。

此时进行最后一步验证,就是往第二个topic写数据。

我在这个时间往第二个topic发了数据

collectTime":1697693856606

在这里插入图片描述
为了让大家看清楚现象,我把日志和截图都给出来

2023-10-19 13:37:32.699 [Legacy Source Thread - Source: Custom Source -> Flat Map -> (Flat Map -> Flat Map -> Sink: Unnamed, Timestamps/Watermarks -> (Flat Map, Flat Map, Flat Map)) (10/16)#0] INFO  c.a.c.d.risk.domain.function.IndicatrixMapFunction - 【通过】滑动窗口前置数据处理
2023-10-19 13:37:32.805 [Window(TumblingEventTimeWindows(60000), EventTimeTrigger, CountAverageFunction, LogResultWindowFunction) (13/16)#0] INFO  com.ai.cass.dc.risk.re.idxSend.IdxSend - 聚合时:存储指标结果,calcTypeCode:FrequencyOccurStttc key:ff83d41c-335f-405d-88e7-f5285aecdcf5a1123 Value:8
2023-10-19 13:37:32.805 [Window(TumblingEventTimeWindows(60000), EventTimeTrigger, CountAverageFunction, LogResultWindowFunction) (13/16)#0] INFO  com.ai.cass.dc.risk.re.idxSend.IdxSend - 聚合时:存储指标结果,calcTypeCode:FrequencyOccurStttc key:ff83d41c-335f-405d-88e7-f5285aecdcf5a1123 Value:27
2023-10-19 13:37:32.805 [Window(TumblingEventTimeWindows(60000), EventTimeTrigger, CountAverageFunction, LogResultWindowFunction) (13/16)#0] INFO  com.ai.cass.dc.risk.re.idxSend.IdxSend - 聚合时:存储指标结果,calcTypeCode:FrequencyOccurStttc key:ff83d41c-335f-405d-88e7-f5285aecdcf5a1123 Value:28
2023-10-19 13:37:32.805 [Window(TumblingEventTimeWindows(60000), EventTimeTrigger, CountAverageFunction, LogResultWindowFunction) (13/16)#0] INFO  com.ai.cass.dc.risk.re.idxSend.IdxSend - 聚合时:存储指标结果,calcTypeCode:FrequencyOccurStttc key:ff83d41c-335f-405d-88e7-f5285aecdcf5a1123 Value:17
2023-10-19 13:37:32.805 [Window(TumblingEventTimeWindows(60000), EventTimeTrigger, CountAverageFunction, LogResultWindowFunction) (13/16)#0] INFO  com.ai.cass.dc.risk.re.idxSend.IdxSend - 聚合时:存储指标结果,calcTypeCode:FrequencyOccurStttc key:ff83d41c-335f-405d-88e7-f5285aecdcf5a1123 Value:20

在这里插入图片描述

证明就是在这个时间节点上,窗口计算处理结果

二、结论

因此我就可以大胆地推断,是因为多个topic进行了数据消费,其中有个topic数据会进入窗口进行计算,但有的窗口又永远不会有数据进入计算,这就造成对应的窗口永远没有最低的watermark以致于窗口无法关闭并计算。

三、解决

既然问题找到了,那解决办法就随之而生

  • 1、如果可以不使用水印,直接关闭水印即可,只要消费的数据不会积压,并且要求没那么高的话,这个方法最简单
  • 2、减小并行度到能够使得每个窗口都有数据,减小并行度会让不同topic用同一个窗口,至于这个数量,那还得研究研究了
  • 3、把需要到窗口和不到窗口计算的数据进行分流
  • 4、也可以把源与后面算子之间采用rebalance的方式传递,这样就能够轮询的方式往下传递,使得每个window都会有数据,这里有一点一定要注意,rebalance必须放在watermark之前才可以。

相关文章:

增加并行度后,发现Flink窗口不会计算的问题。

文章目录 前言一、现象二、结论三、解决 前言 窗口没有关闭计算的问题,一直困扰了很久,经过多次验证,确定了问题的根源。 一、现象 Flink使用了window,同时使用了watermark ,并且还设置了较高的并行度。生产是设置了…...

使用 JMeter 和 Docker 进行服务存根

用于性能测试的服务存根:简介 随着测试项目的复杂性不断增加,越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时,我指的是: 不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统&am…...

《王道计算机考研——操作系统》学习笔记总目录+思维导图

本篇文章是对《王道计算机考研——操作系统》所有知识点的笔记总结归档和计算机网络的思维导图 学习视频:王道计算机考研 操作系统 408四件套【计网、计组、操作系统、数据结构】完整课堂PPT 思维导图 (求Star~):【王道考研】计…...

多模态及图像安全的探索与思考

前言 第六届中国模式识别与计算机视觉大会(The 6th Chinese Conference on Pattern Recognition and Computer Vision, PRCV 2023)已于近期在厦门成功举办。通过参加本次会议,使我有机会接触到许多来自国内外的模式识别和计算机视觉领域的研究…...

基础算法相关笔记

排序 最好情况下: 冒泡排序 最坏时间复杂度 O ( n 2 ) O(n^2) O(n2)。 插入排序 最坏时间复杂度为 O ( n 2 ) O(n^2) O(n2),最优时间复杂度为 O ( n ) O(n) O(n)。 平均情况下: 快速排序 最坏时间复杂度为 O ( n 2 ) O(n^2) O(n2)&…...

Mac电脑无法识别移动硬盘怎么办?

很多人都喜欢在Mac电脑上办公、学习,但有时我们将移动硬盘连接Mac电脑时,却会发现电脑无法识别移动硬盘。那么,Mac电脑无法识别移动硬盘怎么办呢? Mac无法识别移动硬盘的原因 导致Mac不识别移动硬盘的原因有很多,你可…...

14Maven与Tomcat面试题

1MAVEN Maven是一个基于项目对象模型(POM)的项目管理工具,它可以帮助开发者自动化构建、依赖管理、项目报告等。Maven通过一个中央信息片段能够管理项目的构建、报告和文档等步骤,同时也能够管理项目的依赖。Maven的核心概念是POM…...

会议OA小程序【首页布局】

目录 一. Flex布局介绍 1.1 什么是Flex布局 1.2 基本概念 1.3 Flex属性 二. 会议OA首页轮播图的实现 配置 Mock工具 swiper 效果展示 三. 会议OA首页会议信息布局 index.js index.wxml index.wxss 首页整体效果展示 一. Flex布局介绍 布局的传统解决方案&#x…...

高效表达三步

一、高效表达 高效表达定主题搭架子填素材 第一: 1个核心主题,让别人秒懂你的想法 (表达要定主题) 第二: 3种经典框架,帮你快速整理表达思路 第三: 2种表达素材,让发言更具说服力…...

怎样修改ESP32的CPU主频

ESP32的主频默认设置为160mhz,但ESP32最高可以跑到240mhz, 修改方法: idf.py menuconfig --> Component config --> ESP System Settings --> CPU frequency 可以看到三个选项,80,160, 240&…...

《视觉 SLAM 十四讲》V2 第 10 讲 后端优化2 简化BA 【位姿图】

文章目录 第10讲 后端210.1 滑动窗口滤波 和 优化10.1.2 滑动窗口法 10.2 位姿图10.3 实践: 位姿图优化本讲 CMakeLists.txt 10.3.1 g2o 原生位姿图 【Code】10.3.2 李代数上的位姿优化 【Code】 习题10题1 【没推完】 LaTex 第10讲 后端2 滑动窗口优化 位姿图优化…...

【斗破年番】再遭群嘲,美杜莎怀孕之事被魔改,三方联手除萧潇?

【侵权联系删除】【文/郑尔巴金】 斗破苍穹年番第67集已经更新了。和很多人一样,小郑也去看了,只是小郑万万没有想到,我满怀期待的去看这一集,这一集却能魔改成这样。魔改成什么样了呢?下面来分析下吧! 一&…...

字节面试题——计算机网络,附答案

1.TCP 三次握手和四次挥手 相关面试题: 计算机网络常见面试题总结(上) | JavaGuide(Java面试 学习指南) 为什么要三次握手?第 2 次握手传回了 ACK,为什么还要传回 SYN?为什么要四次挥手?为什么不能把服务器发送的 ACK 和 FIN…...

Flask Web 安装bootstrap失败pip install bootstrap

失败原因:网速太慢了 把公共wifi换成手机热点,成功:) 😃 更新:开了手机热点还是报下面的错,但是把科学上网关了,就成功了,反正就是网络问题...

可视化 | python可视化相关库梳理(自用)| pandas | Matplotlib | Seaborn | Pyecharts | Plotly

文章目录 📚Plotly🐇堆叠柱状图🐇环形图🐇散点图🐇漏斗图🐇桑基图🐇金字塔图🐇气泡图🐇面积图⭐️快速作图工具:plotly.express🐇树形图&#x1f…...

黑豹程序员-架构师学习路线图-百科:Java的第二春Spring框架

文章目录 1、 Spring的发展历史2、为什么Spring能霸屏?2.1、容器的设计2.2、通过四个策略2.3、三种方式 3、学习编程设计的典范 1、 Spring的发展历史 正当SUN公司的EJB在全球开始热炒时,正当程序员纷纷转型EJB开发时,正当程序员为跑通EJB程…...

C#获取指定软件安装路径

作用 每个电脑安装的路径不一致会导致无法动态获取指定软件的安装路径,通过注册表来获取安装路径 代码 RegistryKey registryKeyPro Registry.LocalMachine.OpenSubKey("SOFTWARE\\****"); string installDir (string)(registryKeyPro.GetValue(&quo…...

统计射击比赛成绩

题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。 条件如下 ① 一个选手可以有多个射击成绩的分数,且次序不固定。 ② 如果一个选手成绩少于3个,则认为选手的所有成绩无效…...

flink的TwoPhaseCommitSinkFunction怎么做才能提供精准一次保证

背景 TwoPhaseCommitSinkFunction是flink中基于二阶段事务提交和检查点机制配合使用实现的精准一次的输出数据汇,但是想要实现精准一次的输出,实际使用中需要注意几个方面,否则不仅仅达不到精准一次输出,反而可能导致数据丢失&am…...

CMake系列讲解(入门篇)1.8 基础命令CMake-set() unset()

基础命令set() unset() 〓〓〓〓〓〓〓〓踏实学CMake总目录〓〓〓〓〓〓〓〓〓〓 8. set() unset() 在CMake中&#xff0c;set用于设置变量的值。这个变量可以为普通变量、Cache或者是环境变量。 如果提供了一个或多个 <value> 参数&#xff0c;则将 <variable> 设…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

高效的后台管理系统——可进行二次开发

随着互联网技术的迅猛发展&#xff0c;企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心&#xff0c;成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统&#xff0c;它不仅支持跨平台应用&#xff0c;还能提供丰富…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品&#xff08;包括KL357NU、KL3H7U和KL817U&#xff09;&#xff0c;专为高温环境下的汽车应用设计&#xff0c;具备以下核心优势和技术特点&#xff1a; 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计&#xff0c;确保在…...