Flink 优化及问题

问题排查

  • 看反压:背压高的下游oprator就是瓶颈
  • 关注checkpoint时长
    checkpoint时长一定程度影响系统吞吐
  • 看核心指标
    延迟指标、吞吐等
  • 资源使用率

常见问题

  1. json序列化反序列化
    通常在source和sink的task上,在指标上没有体现,容易被忽略(取消operator chain,查看反压)
  2. 数据倾斜
    数据倾斜影响系统吞吐
  3. 频繁GC
    内存比例分配不合理导致频繁gc,影响吞吐甚至tm失联
  4. MAP和SET的hash冲突
    有hashmap和hashset 随着负载因子的增高,引起插入和查询性能下降
  5. 和低速的系统交互
    和低速的外部系统交互,mysql、hbase (增加应用缓存、积攒批次处理避免单条查询)
  6. 大窗口
    1)窗口size大、数据量大
    2)滑动窗口size和step步长比例较大 eg size=5min,step=1s 同一条数据查法很多窗口的计算

数据倾斜影响

  • 数据热点:数据集中在某些task中,数据不平衡
  • GC频繁:过多的数据在jvm,导致内存资源短缺,触发频繁gc
  • 吞吐下降,数据延迟增大
  • 系统崩溃 过长的gc会导致tm和jm失联,系统崩溃

数据倾斜

1.源头
数据源消费不均匀,调整并行度(eg kakfa 分区 3个kafka分区 两个并行度 导致其中一个task处理2个kafka分区 另一个处理一个分区)
解决办法:通常source的并法度是kafka分区的整数倍

2.聚合场景


image.png

解决办法:两段聚合的方式(局部聚合+全局聚合)
方案适用场景:对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group by语句进行分组聚合时,比较适用这种方案。

方案实现思路:这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数(注意:随机数范为选择为下游并发度),比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello, 1) (hello, 1) (hello, 1) (hello, 1),就会变成(1_hello, 1) (1_hello, 1) (2_hello, 1) (2_hello, 1)。接着对打上随机数后的数据,执行reduceByKey等聚合操作,进行局部聚合,那么局部聚合结果,就会变成了(1_hello, 2) (2_hello, 2)。然后将各个key的前缀给去掉,就会变成(hello,2)(hello,2),再次进行全局聚合操作,就可以得到最终结果了,比如(hello, 4)。

内存调优

image.png

Flink中的总内存由JVM堆、manager memory和network buffers构成
对于容器化部署,总内存还可以包括一个容器预留内存

所有其他内存组件都是在启动Flink进程之前从total memory中计算出来的。启动后,manager memory和network buffers在某些情况下根据进程内可用的JVM内存进行调整
total memory 由taskmanager.heap.size指定
在Yarn or Mesos部署时,是请求容器大小

Container cut-off

引入截断是为了适应其他类型的内存消耗,而这些消耗在这个内存模型中没有考虑,例如RocksDB本机内存、JVM开销等。它也是一个安全余量,以防止容器超出其内存限制并被容器管理器杀死。
containerized.heap-cutoff-ratio :默认为0.25(占总内存的)

堆外内存调优

  • NetworkBuffer
    taskmanager.network.memory.fraction:默认是0.1
    taskmanager.network.memory.min:默认是64M
    taskmanager.network.memory.max: 默认是1G
    一般taskmanager.network.memory.fraction是0.1或小于0.1 根据使用情况调整

  • ManagerBuffer :
    taskmanager.memory.off-heap:true(默认是false不开启)
    taskmanager.memory.fraction(默认是0.7)
    考虑到流计算过程中ManagerBuffer没有使用,可以taskmanager.memory.fraction调整小于0.3

堆内内存调优
flink运行在jvm上,Flink使用的 Parallel Scavenge垃圾回收器可以改为G1

env.java.opts= -server -XX:+UseG1GC - XX:MaxGCPauseMillis=300 -XX:+PrintGCDetails

内存模型的例子

TM总内存8G, cutoff:容器的预留内存(k8s、yarn)为8G * 0.25

taskmanager.memory.fraction设置,例如
0.8的值意味着TM为内部数据缓冲区保留了80%的内存(堆内或堆外,取决于taskmanager.memory.off . heap),将20%的空闲内存留给TM的堆,供用户定义的函数创建的对象使用。此参数仅在taskmanager.memory未设置是生效。
managed = (total - network) x fraction
heap = total - managed (if off-heap) - network
network = Min(max, Max(min, fraction x total)

  • 作业failover的常见原因
    jobmanager
    zk访问超时
    长时间GC
    资源问题
    主机故障(磁盘等)
  • taskmanager
    上下游异常
    数据问题
    runtime异常
    主机异常

延迟问题处理

  • 延迟与吞吐
    确定延时节点及时间
  • 反压分析
    找到反压节点
    指标分析
    查看一段时间的指标
    堆栈
    找到指定节点jvm进程、分析jstack等信息
    相关日志
    查看taskmanager日志是否有异常

作业性能问题

  • 延时与吞吐
    延时指标
    tps吞吐
    节点输入输出
  • 反压
    找出反压源节点
    节点连接方式 shuffle、rebanlance、hash
    节点个并发情况
    业务逻辑、是否有正则、外部系统访问等

作业性能问题

  • 指标
    gc时间
    gc次数
    state checkpoint性能
    外部系统访问延时
  • 堆栈
    节点所在taskmanager进程
    查看线程PID


    image.png
  • 常见处理方式

  • 调整节点并发
    性能瓶颈问题增加并发

  • 调整节点资源
    增加节点内存 cpu资源

  • 拆分节点
    将chain在一起消耗资源较多的operator分开,增加并发

  • 作业集群优化
    主键设置 数据去重 数据倾斜
    GC参数
    jobmanager参数

image.png

堆栈
failover信息补全,需要到job mamaner 中看更详细的日志

  • 建立指标系统
    延迟和吞吐是flink最重要的指标
    tps 每秒有多少数据进入系统 消费是否能跟上生产
  • 如何查看日志
    yarn的container 日志和查看jobmanamger taskmanager 的日志
1588821660971.png
image.png
image.png
image.png

参考
https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/mem_setup.html
https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
https://blog.csdn.net/nazeniwaresakini/article/details/104220120?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342