带你认识FusionInsight Flink:既能批处理,又能流处理_flink在启动过程中资源量等于每个算子并行度之和(1)

  • 上图中下半部分是上半部分的一个并行版本,对每一个Task都并行化为多个Subtask,这里只是演示了2个并行度,sink算子是1个并行度。

日志介绍

日志描述

日志存储路径:

  • Executor运行日志:“ B I G D A T A _ D A T A _ H O M E / h a d o o p / d a t a {BIGDATA\_DATA\_HOME}/hadoop/data BIGDATA_DATA_HOME/hadoop/data{i}/nm/containerlogs/application_KaTeX parse error: Expected '}', got 'EOF' at end of input: …d}/container\_{contid}”

运行中的任务日志存储在以上路径中,运行结束后会基于Yarn的配置确定是否汇聚到HDFS目录中。

  • 其他日志:“/var/log/Bigdata/flink/flinkResource”

日志归档规则:

  • Executor日志默认50MB滚动存储一次,最多保留100个文件,不压缩。
  • 日志大小和压缩文件保留个数可以在FusionInsight Manager界面中配置。

Flink日志列表

日志级别

Flink中提供了如下表所示的日志级别。日志级别优先级从高到低分别是ERROR、WARN、INFO、DEBUG。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

日志级别

如果您需要修改日志级别,请执行如下操作:

  1. 登录FusionInsight Manager系统。
  2. 选择“服务管理 > Flink > 服务配置”。
  3. “参数类别”下拉框中选择“全部”。
  4. 左边菜单栏中选择所需修改的角色所对应的日志菜单。
  5. 选择所需修改的日志级别。
  6. 单击“保存配置”,在弹出窗口中单击“确定”使配置生效。

配置完成后立即生效,不需要重启服务。

日志格式

常见故障

1. Flink对接kafka-写入数据倾斜,部分分区没有写入数据

问题现象与背景

使用FlinkKafkaProducer进行数据生产,数据只写到了kafka的部分分区中,其它的分区没有数据写入

原因分析

  • 可能原因1:Flink写kafka使用的机制与原生接口的写入方式是有差别的,在默认情况下,Flink使用了”并行度编号+分区数量”取模计算的结果作为topic的分区编号。那么会有以下两种场景:

    1. 并行度%分区数量=0,表示并行度是kafkatopic分区数的一倍或者多倍,数据的写入每个分区数据量是均衡的。
  1. 并行度%分区数量≠0,那么数据量势必会在个别分区上的数据量产生倾斜。
  • 可能原因2:在业务代码的部分算子中使用了keyby()方法,由于现网中的数据流中,每个key值所属的数据量不一致(就是说某些key的数据量会非常大,有些又非常小)导致每个并行度中输出的数据流量不一致。从而出现数据倾斜。

解决办法

原因一:

方法1,调整kafka的分区数跟flink的并行度保持一致,即要求kafka的分区数与flink写kafka的sink并行度保持强一致性。这种做法的优势在于每个并行度仅需要跟每个kafka分区所在的 broker保持一个常链接即可。能够节省每个并发线程与分区之间调度的时间。

方法2,flink写kafka的sink的分区策略写成随机写入模式,如下图,这样数据会随即写入topic的分区中,但是会有一部分时间损耗在线程向寻址,推荐使用方法1。

原因二:

需要调整业务侧对key值的选取,例如:可以将key调整为“key+随机数”的方式,保证Flink的keyby()算子中每个处理并行度中的数据是均衡的。

2. Flink任务的日志目录增长过快,导致磁盘写满

问题现象

集群告警磁盘使用率超过阈值,经过排查发现是taskmanager.out文件过大导致

原因分析

代码中存在大量的print模块,导致taskmanager.out文件被写入大量的日志信息,taskmanager.out 一般是,业务代码加入了 .print的代码,需要在代码中排查是否有类似于以下的代码逻辑:

或者类似于这样的打印:

如果包含,日志信息会持续打印到taskmanager.out里面。

解决方案

将上图红框中的代码去掉,或者输出到日志文件中。

3. 任务启动失败,报资源不足:Could not allocate all requires slots within timeout of xxxx ms

问题现象

任务启动一段时间后报错,例如如下日志,需要60个资源实际上只有54个。

原因分析

Flink任务在启动过程中的资源使用是先增长在下降到当前值的,实际在启动过程中需要的资源量等于每个算子并行度之和。等到任务开始运行后,Flink会对资源进行合并。

例如如下算子,在启动过程中需要“1+6+6+5+3=21”个资源。

但是运行稳定后会降低到6。这个是Flink的机制。假如任务在启动过程中不满足21个资源的启动资源量,任务就会出现NoResourceAvailableException的异常。

解决方案

减少任务的启动并发,或者将其它任务kill掉再启动Flink任务。

4. 算子的部分节点产生背压,其它节点正常

问题现象

业务运行一段时间以后,算子的部分节点出现背压。

原因分析

通过Flink原生页面排查这个并发的算子所在的节点,通过上图我们能够看出是异常算子的第44个并发。通过前台页面能够查看并确认第44并发所在的节点,例如下图:

通过查找这个节点在taskmanager列表,例如下图位置:

整理taskmanager在每个nodemanager节点的数量发现,背压节点启动的taskmanager数量过多。

经过排查,该yarn集群资源相对比较紧张,每个节点启动的taskmanager数量不一致,如果部分节点启动的较多容易出现数据倾斜。

解决方案

建议一个节点启动多个slot。避免多个taskmanager出现在一个nodemanager节点上。启动方式见:slot优化

FAQ

Flink如何加载其它目录的jar包
需求描述

Flink业务一般在运行过程中默认加载的jar包路径为:“xxx/Flink/flink/lib”的目录下,如果添加其它路径的jar包会报错,如何添加其它外部依赖。

实现方案

创建一个外部的lib目录,将部分依赖包放到外部lib目录下,如下图:

修改启动脚本的参数配置脚本,config.sh将jar包路径传给环境变量中。

此时正常启动任务即可,不需要加其它参数。

HDFS上也能看到第三方jar的目录。

如何收集任务taskmanager的jstack和pstree信息
需求描述

在任务运行过程中我们通常需要对taskmanager的进程进行查询和处理,例如:打jstack,jmap等操作,做这些操作的过程中需要获取任务的taskmanager信息。

实现方案

获取一个nodemanager节点上面所有taskmanager的进程信息的方法如下:

ps -ef | grep taskmanager | grep -v grep | grep -v “bash -c”

其中红框中的内容就是taskmanager的进程号,如果一个节点上面存在多个taskmanager那么这个地方会有多个进程号。获取到进程号后我们可以针对这个进程号收集jstack或者pstree信息。

收集jstack

1.通过上面流程获取到进程信息,然后从中获取进程ID和application id,如上图中进程id为“30047 applicationid为application_1623239745860_0001”。

2.从FI前台界面获取这个进程的启动用户。如下图为flinkuser。

3.在对应的nodemanager节点后台切换到这个用户,人机用户机机用户即可。

  1. 进入到节点所在的jdk目录下

  1. 给taskmanager进程打jstack。

不同用户提交的taskmanager只能由提交任务的用户打jstack。

收集pstree信息

使用pstree –p PID 的方式能够获取taskmanager的pstree信息,这个地方提供一个收集脚本。内容如下:

#!/bin/bash
searchPID() {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

o2bmf-1713029085188)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-08uwZ1a2-1713029085188)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值