Flink监控看板Dashboard解析
一、
二、常见问题排查
1、数据反压 背压(Backpressure)机制排查
点击JobName

点击某个算子

点击Backpressure查看,状态为HIGH时,则存在数据反压问题


注:若流程为A->B->C->D->E->F ,BCDEF出现反压(即这里status为high),则表示A处理流程导致 B->C->D->E->F 相继慢
查看背压:当DAG的某个过程的背压状态为 low 或者 high 时,则说明下游的处理速度不及上游的输出速度。也就是说 下游的处理是整个任务的瓶颈所在,需要进行优化处理
2、数据倾斜
路径:点击JobName->点击某个算子->SubTasks看每个节点处理数据量。处理不均匀会导致部分窗口数据处理缓慢

处理方式:
数据标记分流[详细代码见通用优化]
窗口优化[详细代码见通用优化]
在不影响逻辑的前提下,keyby对数据分流时选择较为均匀的数据。
3、消费滞后
现象:尚未出现数据反压和数据倾斜的状况,但是flink的watermarks追不上实时时间,不能实时处理
需单进程确认点
flink读取的数据是否产生的及时
窗口Aggregate处理是否存在死循环或较慢的点(如:正则/redis/http等)
flink计算结果的输出处理慢。 (如:使用.disablechain.addsink()后再在dashboard中查看窗口和输出分别处理的速率)
优化方式:将窗口的处理逻辑优化的简单一些,将较长时间的处理放在数据处理部分或windowFunction部分
4、在窗口内做大量的外连情况,如redis/es等,redis连接过多会慢或直接报错
解决方案1:可以在窗口外面申请全局redis连接池作为全局变量
查看代码
class MyProcessWindowFunction extends RichWindowFunction[Accumulator,String,String,TimeWindow] {
@transient var config_redis = new JedisPoolConfig()
config_redis.setMaxTotal(300)
config_redis.setMaxWaitMillis (2*1000)
@transient var jedisPool = new JedisPool(config_redis,"10.10.10.10.",1234,0,"yourpassword")
@transient var client = Esinit() // 此处为es外联的申明
@transient var log = LoggerFactory.getLogger(getClass)
//其他的一些全局变量也可以在这里定义,如log
LoginCheck_api.KeepSession()
//检查保持状态的函数也可以在这里处理,这样不会每个窗口都处理一遍。
override def apply (key: String, window: TimeWindow, input: Iterable[Accumulator], out: Collector[String]): Unit = {
...
//窗口如果定义为null则重新做定义
if(jedisPool==null){
w_log = LoggerFactory.getLogger(getClass)
config_redis = new JedisPoolConfig()
config_redis.setMaxTotal(300)
config_redis.setMaxWaitMillis (2*1000)
jedisPool = new JedisPool(config_redis,"10.10.10.10.",1234,0,"yourpassword")
LoginCheck_api.KeepSession()
}
if(client==null){
client = Esinit()
}
...
问题2:网络延时问题
查看代码
class MyProcessWindowFunction extends RichWindowFunction[Accumulator,String,String,TimeWindow] {
@transient var config_redis = new JedisPoolConfig()
config_redis.setMaxTotal(300)
config_redis.setMaxWaitMillis (2*1000)
@transient var jedisPool = new JedisPool(config_redis,"10.10.10.10.",1234,0,"yourpassword")
@transient var client = Esinit() // 此处为es外联的申明
@transient var log = LoggerFactory.getLogger(getClass)
//其他的一些全局变量也可以在这里定义,如log
LoginCheck_api.KeepSession()
//检查保持状态的函数也可以在这里处理,这样不会每个窗口都处理一遍。
override def apply (key: String, window: TimeWindow, input: Iterable[Accumulator], out: Collector[String]): Unit = {
...
//窗口如果定义为null则重新做定义
if(jedisPool==null){
w_log = LoggerFactory.getLogger(getClass)
config_redis = new JedisPoolConfig()
config_redis.setMaxTotal(300)
config_redis.setMaxWaitMillis (2*1000)
jedisPool = new JedisPool(config_redis,"10.10.10.10.",1234,0,"yourpassword")
LoginCheck_api.KeepSession()
}
if(client==null){
client = Esinit()
}
问题3、网络延时问题
场景:flink反压,且排查redis无太多慢查日志
检查提交集群对redis的延时情况,正常应该在0.099ms以内不会影响到程序的处理过程。
问题4:将对外操作放进单独多线程操作
4、通用优化
1.数据标记分流:
使用数据标记过滤进入窗口的数据,
而非使用filter,map等方式去筛选数据。
split分流 select选择分流.
val frequency_ = Features.split(
(s:Map[String,Any])=>
s.get("method").get.toString match{
case "a"|"b"|"c"|
=> List("str")
case "1"|"2"
=>List("int")
case _
=>List("normal")
}
)
val all = frequency_.select("str","int").assignTimestampsAndWatermarks(new TimestampExtractor())
all.keyby().aggregate()
...
Ps. https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/
2.窗口聚合计算
window apply窗口最后触发时进行一次性计算 aggregate来一条数据计算一次。
Ps.https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/operators/
3.keyby关键词无法自行选择较均匀的情况下,
可以采用keyby(Random(20)+key)的形式进行分配窗口。
最好的方式:
原有DataStream中添加专门用于分窗口的字段,但是可能会影响你窗口聚合的结果。
def dealing_input(str):(String,String){
val keyby_key = scala.util.Random.nextInt(20).toString+"-"+key
return (data,keyby_key)
}
input.keyby(_._2).window().xxx
Flink监控看板Dashboard解析的更多相关文章
- Flink Metrics 源码解析
Flink Metrics 有如下模块: Flink Metrics 源码解析 -- Flink-metrics-core Flink Metrics 源码解析 -- Flink-metrics-da ...
- 基于grafana+prometheus构建Flink监控
先上一个架构图 Flink App : 通过report 将数据发出去 Pushgateway : Prometheus 生态中一个重要工具 Prometheus : 一套开源的系统监控报警框架 ...
- 基于Prometheus和Grafana打造业务监控看板
前言 业务监控对许许多多的场景都是十分有意义,业务监控看板可以让我们比较直观的看到当前业务的实时情况,然后运营人员可以根据这些情况及时对业务进行调整操作,避免业务出现大问题. 老黄曾经遇到过一次比较尴 ...
- Spring Cloud项目之断路器集群监控Hystrix Dashboard
微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完 ...
- 服务容错保护断路器Hystrix之三:断路器监控(Hystrix Dashboard)-单体监控
turbine:英 [ˈtɜ:baɪn] 美 [ˈtɜ:rbaɪn] n.汽轮机;涡轮机;透平机 一.Hystrix Dashboard简介 在微服务架构中为了保证程序的可用性,防止程序出错导致网络阻 ...
- 跟我学SpringCloud | 第五篇:熔断监控Hystrix Dashboard和Turbine
SpringCloud系列教程 | 第五篇:熔断监控Hystrix Dashboard和Turbine Springboot: 2.1.6.RELEASE SpringCloud: Greenwich ...
- Spring Cloud(五)断路器监控(Hystrix Dashboard)
在上两篇文章中讲了,服务提供者 Eureka + 服务消费者 Feign,服务提供者 Eureka + 服务消费者(rest + Ribbon),本篇文章结合,上两篇文章中代码进行修改加入 断路器监控 ...
- ITS智能交通监控系统技术解析
ITS智能交通监控系统技术解析 红灯,逆行,变 车辆抓拍和车速检测 非法停车和交通流量检测 交叉路口违法检测 发生碰撞的交叉口是智能交通管理. 机动执法 当你需要一个可以移动的系统时,会跟着你移动.移 ...
- 006服务监控看板Hystrix Dashboard
1.POM配置 和普通Spring Boot工程相比,仅仅添加了Hystrix Dashboard和Spring Boot Starter Actuator依赖 <dependencies> ...
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...
随机推荐
- elasticsearch之python操作
总结使用python对于elasticsearch的常用操作 安装 pip install elasticsearch 2. 连接 from elasticsearch import Elastics ...
- 药企如何实现ERP系统与CRM系统的整合
ERP系统与CRM系统整合的意义深远,对于企业尤其是药企来说,这种整合能够带来多方面的优势和改进.可以确保企业内部数据的一致性和准确性:优化业务流程.增强决策支持:从而提高企业的整体运营效率和市场竞争 ...
- VLC 播放完毕后自动退出的问题
1.打开设置 2.打开全部显示 3.取消自动退出
- 重磅宣布|强强联合,腾讯云携手Veeam提供云上数据存储服务
近日获悉,腾讯云对象存储COS正式通过Veeam备份软件标准化测试,携手为用户提供云上数据存储服务. Veeam对COS的支持是通过SOBR( Scale out backup repository) ...
- PDFSharp 1.5 更新
PDFsharp 1.50 Preview Information - PDFsharp & MigraDoc PDFShapr 1.50 修复与改进 支持 Object Streams - ...
- 更改linux文件/目录的权限、拥有者及用户组
在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用户可以修改该文件的拥有者及用户组,root用户可以修改任何文件的拥有者及用户组. 在Linux中,对于文件的权限(rwx), ...
- shell脚本,主要是对输入参数检验
usage(){ echo "\nUSAGE:\n" echo "PmActivityReport.sh\t-type\t<latency|activity&g ...
- 一场因OpenJDK引发的血案 之JavaFx
https://zhuanlan.zhihu.com/p/103765203 案发现场 最近做了个项目,本地调试通过了,可在服务器上部署时却编译失败,报错如下 编译失败的原因是缺少javafx.uti ...
- [转]点云库PCL从入门到精通 随书源码(百度网盘下载)
分享给需要的人. 这里有你想要的东西-暗号-pdx6 相关链接: PCL点云数据处理基础️️️目录
- C#中串口类SerialPort类的详细用法
原文链:serialport控件的详细用法