一、

二、常见问题排查

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解析的更多相关文章

  1. Flink Metrics 源码解析

    Flink Metrics 有如下模块: Flink Metrics 源码解析 -- Flink-metrics-core Flink Metrics 源码解析 -- Flink-metrics-da ...

  2. 基于grafana+prometheus构建Flink监控

    先上一个架构图 Flink App : 通过report 将数据发出去 Pushgateway :  Prometheus 生态中一个重要工具 Prometheus :  一套开源的系统监控报警框架 ...

  3. 基于Prometheus和Grafana打造业务监控看板

    前言 业务监控对许许多多的场景都是十分有意义,业务监控看板可以让我们比较直观的看到当前业务的实时情况,然后运营人员可以根据这些情况及时对业务进行调整操作,避免业务出现大问题. 老黄曾经遇到过一次比较尴 ...

  4. Spring Cloud项目之断路器集群监控Hystrix Dashboard

    微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完 ...

  5. 服务容错保护断路器Hystrix之三:断路器监控(Hystrix Dashboard)-单体监控

    turbine:英 [ˈtɜ:baɪn] 美 [ˈtɜ:rbaɪn] n.汽轮机;涡轮机;透平机 一.Hystrix Dashboard简介 在微服务架构中为了保证程序的可用性,防止程序出错导致网络阻 ...

  6. 跟我学SpringCloud | 第五篇:熔断监控Hystrix Dashboard和Turbine

    SpringCloud系列教程 | 第五篇:熔断监控Hystrix Dashboard和Turbine Springboot: 2.1.6.RELEASE SpringCloud: Greenwich ...

  7. Spring Cloud(五)断路器监控(Hystrix Dashboard)

    在上两篇文章中讲了,服务提供者 Eureka + 服务消费者 Feign,服务提供者 Eureka + 服务消费者(rest + Ribbon),本篇文章结合,上两篇文章中代码进行修改加入 断路器监控 ...

  8. ITS智能交通监控系统技术解析

    ITS智能交通监控系统技术解析 红灯,逆行,变 车辆抓拍和车速检测 非法停车和交通流量检测 交叉路口违法检测 发生碰撞的交叉口是智能交通管理. 机动执法 当你需要一个可以移动的系统时,会跟着你移动.移 ...

  9. 006服务监控看板Hystrix Dashboard

    1.POM配置 和普通Spring Boot工程相比,仅仅添加了Hystrix Dashboard和Spring Boot Starter Actuator依赖 <dependencies> ...

  10. springcloud(五):熔断监控Hystrix Dashboard和Turbine

    Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数 ...

随机推荐

  1. golang之Time时间函数

    在编程中,我们经常会遭遇八小时时间差问题.这是由时区差异引起的,为了能更好地解决它们,我们需要理解几个时间定义标准. GMT(Greenwich Mean Time),格林威治平时.GMT 根据地球的 ...

  2. 自动化部署之Gitlab+Jenkins+Docker

    总结自动发布流程:  Gitlab+Jenkins+Docker 一般部署方式: 1.外挂方式: 就是将实际的代码挂载到宿主机上,docker中提供程序运行的环境, 这样的话只需要更新对应的代码就够了 ...

  3. Django之开发restful接口

    django中的开发接口有两种模式FBV和CBV,分别是基于函数视图和基于类视图,详细的可以看看菜鸟教程的Django 视图 - FBV 与 CBV,由于本文的用户管理是一个restful风格的api ...

  4. PythonDay3Advance

    PythonDay3Advance 运算符 位运算符 进制: 将整数分了几种进制表示法 二进制:由0,1构成,逢2进1,以0b开头 八进制:由0,1,2,3,4,5,6,7构成,逢8进1,以0开头 十 ...

  5. ELSTICSEARCH 将数据从热节点转到冷节点

    在ES查询时,有些数据是热点数据,这些数据是需要需要更好的机器配置的节点,当数据变得不是那么重要的时候,我们需要转到配置相对低的节点上. 比如热点新闻专题,我们需要更好的机器,热点过后,这些数据不再需 ...

  6. px2rem 实现vue rem 自适应/

    npm install postcss-px2rem px2rem-loader --save 新建js 文件rem.js // rem等比适配配置文件 // 基准大小 const baseSize ...

  7. DASCTF X CBCTF 2023 Misc Justlisten WP

    DASCTF X CBCTF 2023 Misc Justlisten WP 又是一道很抽象的misc题 首先附件给了一个汉信码,扫码得到: 提示我们使用oursecret: password为0ur ...

  8. 鸿蒙UI布局实战 —— 个人中心页面开发

    1.前言 接下里我们将开启"鸿蒙UI布局系列"的学习,第一站:学习线性布局(Row/Column)+ 弹性布局(Flex) 在展开学习前,先上一个实战demo--开发一个个人中心页 ...

  9. win10重装如何跳过微软账号直接设置本地帐户

    ​在添加你的帐户界面,选择脱机帐户 第二个页面,选择有限的体验 第三个页面,设置自己本地的用户名 第四个页面,设置自己本地的密码

  10. 依赖注入在 dotnet core 中实现与使用:5. 使用支持 Unicode 的 HtmlEncoder

    现象 在 ASP.NET Core MVC 中,当在页面中传递了一个包含中文字符串到页面的时候,页面的显示是正常的,但是如果查看页面源码,却看不到中文,变成了一串编码之后的内容. 例如,在页面中直接定 ...