分析Flink,源和算子并行度不一致时,运行一段时间后,看似不再继续消费的问题,提供解决思路。

文章目录

  • 背景
    • 分析
  • 问题来了
  • 比较一开始的情况
  • 解决方式


背景

之前有分析过一次类似问题,最终结论是在keyby之后,其中有一个key数量特别庞大,导致对应的subtask压力过大,进而使得整个job不再继续运作。在这个问题解决之后,后续又再次出现了积压的情况,针对这个问题进行排查分析。


分析

通过以下这张图,可以看到当前它是没有数据积压的。
在这里插入图片描述
可以看到source-map-map-sink/map都放在了同一个task中,因为Flink的operator chain(算子链)机制,数据是通过调用链接算子的processElement()方法,直接将数据推给下游处理了。这里有300个并行度,也就是有300个subtask,每个算子之间都是一一对应的,如果其中一个并行度的源一直没有消费到数据,那么它的下游就一样会是空闲的
在这里插入图片描述
通过这张图可以看到有的subtask根本就没有在处理数据,而有的处理的是大量的数据。那这种肯定不是我们想要的。这种情况,资源存在浪费。
在这里插入图片描述
在前后并行度不一致的时候,task之间就会默认采用rebalance做负载均衡
在这里插入图片描述
可以看到这种情况下,下游每个task处理的数据是比较平均的,在经过均衡之后
在这里插入图片描述

问题来了

到了这里就发现了个问题,竟然出现了严重的阻塞问题。
但仔细一看,并不是所有下游的subtask都是busy。
在这里插入图片描述
这种均衡之后部分阻塞的问题,经过代码,和实际的数据结合分析,我得出的结论是有一类数据,需要处理的时间是其他数据的几十倍。rebalance是轮询分配的,在某几个task接收到大量该类数据,导致它的运行压力直线上升,进而使得分配到此处时塞不进去了。即导致整体的阻塞。

比较一开始的情况

那么一开始为什么就没有阻塞呢,这一下就让人非常费解,明明rebalance负载均衡之后应该压力更小,更能够消费得过来才对,怎么现在就消费不来了呢。
在task中看到这样的日志,因为消费不来,很多该类topic的数据被丢弃了,因为没有阻塞,所以其他topic也就都能够正常消费。
在这里插入图片描述

解决方式

所以要解决这个问题的根本方式有两种
1、先把同一种数据需要耗费的时间与其他方式耗费时间差距较大的,进行缩小差距。
2、优化代码,让算子中的效率增加,处理每一条数据的时间减小
3、加大资源,增加并行度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/94628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot | RestTemplate异常处理器ErrorHandler使用详解

关注wx:CodingTechWork 引言 在代码开发过程中,发现很多地方通过RestTemplate调用了第三方接口,而第三方接口需要根据某些状态码或者异常进行重试调用,此时,要么在每个调用的地方进行异常捕获,然后重试&am…

手撕单链表

目录 链表的概念和结构 单链表的实现 申请新结点 打印 尾插 头插 尾删 头删 ​编辑 查找 在pos位置前插入元素 在pos位置后插入元素 删除pos位置的元素 删除pos位置之后的位置的元素​编辑 完整代码 SListNode.h SListNode.c 链表的概念和结构 链表是一种物理存储…

Python“牵手”1688商品评论数据采集方法,1688API申请指南

1688平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,1688API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问1688平台的数据,包括商品信息、店铺信息、物流信息等,从而实现1688平台…

【网络】传输层——TCP(滑动窗口流量控制拥塞控制延迟应答捎带应答)

🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 上篇文章对TCP可靠性机制讲解了一部分,这篇文章接着继续讲解。 🎨滑动窗口 在…

CentOS 7 安装MySQL8.0.33

一、查看 CentOS 版本 要查看当前 CentOS 版本,你可以执行以下命令: cat /etc/centos-release 该命令将显示当前 CentOS 的版本信息,例如: CentOS Linux release 7.9.2009 (Core) 在这个示例中,CentOS 版本为 7.…

七麦analysis参数加密分析

文章目录 1. 接口分析2. 断点调式3. 补环境重写加密4. 验证结果 1. 接口分析 目标站点: aHR0cHM6Ly93d3cucWltYWkuY24vcmFuay9tYXJrZXRSYW5r 先刷新网页,请求接口中的analysis参数本次分析的目标 2. 断点调式 打上XHR断点,刷新页面之后断点…

Linux系统中lib64文件夹下包含:动态链接库,静态链接库,内核模块等

lib64 目录对系统稳定运行有重要作用。 目录 lib64文件动态链接库静态链接库内核模块 lib64文件 lib64 文件夹存放主要是可被程序直接加载并使用的 64 位代码模块,包括动态库、静态库、内核模块等,这些文件对程序运行都至关重要。 在 Linux 系统中,lib64 文件夹通常用于存放…

jmeter errstr :“unsupported field type for multipart.FileHeader“

在使用jmeter测试接口的时候,提示errstr :"unsupported field type for multipart.FileHeader"如图所示 这是因为我们 在HTTP信息头管理加content-type参数有问题 直接在HTTP请求中,勾选: use multipart/form-data for POST【中文…

性能分析之MySQL慢查询日志分析(慢查询日志)

一、背景 MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一…

Selenium 测试用例编写

编写Selenium测试用例就是模拟用户在浏览器上的一系列操作,通过脚本来完成自动化测试。 编写测试用例的优势: 开源,免费。 支持多种浏览器 IE,Firefox,Chrome,Safari。 支持多平台 Windows,Li…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明: 安装与卸载中,用户全部切换成为root&#xff0c…

==和equals方法之间的区别,hashcode的理解

和equals方法之间的区别 hashcode是什么?有什么作用? Java中Object有一个方法: public native int hashcode(); (1)hashcode()方法的作用 hashcode()方法主要配合基于散列的集合一起使用,比如HashSet、…

Java数字化智慧工地管理云平台源码(人工智能、物联网、大数据)

智慧工地优势:"智慧工地”将施工企业现场视频管理、建筑起重机械安全监控、现场从业人员管理、物料管理、进度管理、扬尘噪声监测等现场设备有机、高效、科学、规范的结合起来真正实现工程项目业务流与现场各类监控源数据流的有效结合与深度配合,实…

C语言暑假刷题冲刺篇——day3

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你有…

iOS自定义下拉刷新控件

自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件,想写一个玩玩,自定义一个在使用的时候也会比较有意思。使应用更加的灵动一些,毕竟谁不喜欢各种动画恰到好处的应用呢。 使用方式如下: tableview.refreshControl XRef…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续…

Data Abstract for .NET and Delphi Crack

Data Abstract for .NET and Delphi Crack .NET和Delphi的数据摘要是一套或RAD工具,用于在.NET、Delphi和Mono中编写多层解决方案。NET和Delphi的数据摘要是一个套件,包括RemObjects.NET和Delphi版本的数据摘要。RemObjects Data Abstract允许您创建访问…

【C++精华铺】7.C++内存管理

目录 1. C语言动态内存管理 2. C内存管理方式 2.1 new/delete和new T[]/delete[] 2.1.1 操作内置类型 2.1.2 操作自定义类型 2.2 new/delete和new T[]/delete[]的原理 2.2.1 原理 2.2.2 operator new和operator delete 2.2.3 new T[]的特殊处理(可以…

docker的资源控制管理——Cgroups

目录 一、对CPU使用率的控制 1.1 CPU 资源控制 1.2 cgroups有四大功能 1.3 设置cpu使用率上限 查看周期限制和cpu配额限制 进行cpu压力测试然后修改每个周期的使用cpu的时间,查看cpu使用率 1.4 设置cpu资源占用比(设置多个容器时才有效&#xf…

chatserver服务器开发笔记

chatserver服务器开发笔记 1 chatserver2 开发环境3 编译 1 chatserver 集群聊天服务器和客户端代码,基于muduo、redis、mysql实现。 学习于https://fixbug.ke.qq.com/ 本人已经挂github:https://github.com/ZixinChen-S/chatserver/tree/main 需要该项…