首页 > 其他分享 >Flink调优

Flink调优

时间:2023-08-02 18:04:18浏览次数:48  
标签:堆外 Flink 并行度 调优 内存 设置 算子

一、资源配置优化

1、并行度

1.1 并行度设置

并行度(parallelism):为任务提供足够的并行度,但并行度也不是越大越好,太多会加重数据在多个solt/task manager之间数据传输压力,包括序列化和反序列化带来的压力。

一个任务的并行度设置可以从4个层面指定:

  • Operator Level(算子层面)
  • Execution Environment Level(执行环境层面)
  • Client Level(客户端层面)
  • System Level(系统层面)

这些并行度的优先级为Operator Level>Execution Environment Level>ClientLevel>System Level

1.2 如何设置合适的并行度

  • 数据源的并行度:数据源的并行度应该等于或大于最终算子的并行度,以充分利用系统资源。
  • 算子逻辑的复杂度:算子逻辑越复杂,相应的并行度就需要更高才能提供足够的吞吐量。因此,在确定算子并行度时,应该考虑算子逻辑的复杂度。
  • 系统资源的可用性:在确定算子并行度时,应该考虑系统可用的资源。例如,如果系统的CPU和内存资源有限,那么高并行度可能会导致任务竞争和低性能。
  • 数据倾斜:数据倾斜是指数据分布不均衡,这可能会导致某些算子的并行度成为瓶颈。在这种情况下,可以通过调整算子的并行度来解决数据倾斜问题。
  • 实验调整:最终的并行度设置可能需要通过实验来进行调整。可以通过监视和调整算子的并行度来观察和优化作业性能。

1.3 并行度设置不合理会导致哪些问题

  • 反压:Flink中某些算子的并行度设置过小可能会导致反压的情况。反压是指某个算子的输出速度超过了下游算子的处理速度,导致下游算子的任务堆积和延迟。这可能会导致整个作业的性能下降和任务失败。可以通过web ui查看作业的反压情况(具体另文说明)
  • 过高的并行度设置可能会导致资源浪费。如果某个算子的并行度设置过高,该算子可能会占用过多的系统资源,从而影响整个作业的性能。此外,过高的并行度设置还可能会导致任务之间的竞争,从而影响系统的稳定性。
  • 过高或过低的并行度设置还可能会导致数据倾斜。如果某个算子的并行度设置过高或过低,可能会导致数据倾斜,从而影响整个作业的性能。过高的并行度设置可能会导致某些子任务负载过重,从而导致数据倾斜。过低的并行度设置可能会导致某些子任务负载过轻,从而导致数据倾斜。
  • 并行度的限制:Source和Sink环节的并行度设置,要结合相应connector的特性。比如:mysql-cdc binlog的并行度通常为1;写clickhouse的并行度不能太大,太大了可能会影响clickhouse的写性能。

备注:mysql-cdc connector只能设置一个并行度,主要可能有这些原因:

  • mysql binlog本质上是一个文件,多个并行度消费需要避免重复。
  • 多个并行度消费难以保证顺序。

2、Flink内存管理及优化

Flink内存介绍的官网文档地址:https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/deployment/memory/mem_setup/

2.1 堆内内存(on-heap memory)和堆外内存(off-heap memory)

在介绍Flink内存之前,先简单介绍下,JVM中堆内内存(on-heap memory)和堆外内存(off-heap memory)。堆外内存和堆内内存是相对的二个概念。

2.1.1 堆内内存(jvm heap memory)

其中堆内内存是运行JAVA程序时经常用到的内存配置,在jvm参数中只要使用-Xms,-Xmx等参数就可以设置堆的大小和最大值。

在使用堆内内存(heap memory)的时候,遵守JVM虚拟机的内存管理机制,采用垃圾回收器(GC)统一进行内存管理,GC会在某些特定的时间点进行一次彻底回收,也就是Full GC,GC会对所有分配的堆内内存进行扫描,在这个过程中会对JAVA应用程序的性能造成一定影响,还可能会产生程序异常或退出。

JAM堆的计算公式:堆内内存 = 新生代+老年代+持久代

2.1.2 堆外内存(off-heap memory)

和堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。

使用堆外内存的优点:

  • 减少了垃圾回收:因为垃圾回收会暂停其他的工作。
  • 加快了复制的速度:堆内在flush到远程时,会先复制到直接内存(非堆内存),然后再发送;而堆外内存相当于省略掉了这个工作。

Flink内存结构

Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)和堆外内存(Off-Heap Memory)。 其中堆外内存包括直接内存(Direct Memory)和本地内存(Native Memory)

Flink调优_Memory

Flink调优_Memory_02

内存优化:Flink任务需要大量的内存来存储数据和状态信息。因此,我们要尽可能地减少内存的使用量。可以通过以下几种方式来实现:

使用更小的窗口大小:窗口大小越大,需要的内存就越多,使用更小的窗口来减少内存的使用量。

使用更小的数据类型:Flink支持多种数据类型,使用更小的数据类型来减少内存的使用量。

使用更小的并行度:并行度越大,需要的内存越多,使用更小的并行度来减少内存的使用量。

内存参数的配置方式

Flink内存优化

配置进程参数

解决数据倾斜

一、 Checkpoint 设置

1、Checkpoint 间隔不要太短

虽然理论上 Flink 支持很短的 checkpoint 间隔,但是在实际生产中,过短的间隔对于底层分布式文件系统而言,会带来很大的压力。另一方面,由于检查点的语义,所以实际上 Flink 作业处理 record 与执行 checkpoint 存在互斥锁,过于频繁的 checkpoint,可能会影响整体的性能。当然,这个建议的出发点是底层分布式文件系统的压力考虑。

2、 合理设置超时时间

默认的超时时间是 10min,如果 state 规模大,则需要合理配置。最坏情况是分布式地创建速度大于单点(job master 端)的删除速度,导致整体存储集群可用空间压力较大。建议当检查点频繁因为超时而失败时,增大超时时间。

并行度(parallelism):保证足够的并行度,并行度也不是越大越好,太多会加重数据在多个solt/task manager之间数据传输压力,包括序列化和反序列化带来的压力。

CPU:CPU资源是task manager上的solt共享的,注意监控CPU的使用。

3、内存:内存是分solt隔离使用的,注意存储大state的时候,内存要足够。

4、网络:大数据处理,flink节点之间数据传输会很多,服务器网卡尽量使用万兆网卡。

Operator Chain

Slot Sharing

Flink 作业的问题定位

六、Flink常见性能问题f

标签:堆外,Flink,并行度,调优,内存,设置,算子
From: https://blog.51cto.com/u_15891458/6940975

相关文章

  • Flink介绍
    1什么是Flink官网定义:ApacheFlink isaframeworkanddistributedprocessingengineforstatefulcomputationsover unbounded and bounded datastreams.Flinkhasbeendesignedtorunin allcommonclusterenvironments,performcomputationsat in-memory s......
  • JVM调优篇:探索Java性能优化的必备种子面试题
    JVM内存模型首先面试官会询问你在进行JVM调优之前,是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区(1.7之后更改为元空间,并直接使用系统内存)。正常堆内存又分为年轻代和老年代。在Java虚拟机中,年轻代用......
  • 项目优化调优
    啊 一个用户充值时会有多种优惠,默认给用户最高的,为了提升这方面的速度,采用countDownLatch每种优惠计算一下最后金额,返回最低金额。40ms降到20ms  立减的时候,qps较高,还是用多线程降低rt,但是并没有降,load急速上升。拆分表,按业务拆分 春节档玩法多,某个值到了才能参加活......
  • HBase Compaction 原理与线上调优实践
    作者:vivo互联网存储技术团队-HangZhengbo本文对HBaseCompaction的原理、流程以及限流的策略进行了详细的介绍,列举了几个线上进行调优的案例,最后对Compaction的相关参数进行了总结。一、Compaction介绍HBase是基于一种LSM-Tree(Log-StructuredMergeTree)体系架构的存储模......
  • Flink 容错机制 保存点和检查点
    Flink检查点常用配置://配置检查点env.enableCheckpointing(180000);//开启checkpoint每180000ms一次env.getCheckpointConfig().setMinPauseBetweenCheckpoints(50000);//确认checkpoints之间的时间会进行50000msenv.getCheckpointConfig().setCheckpointTimeout(60......
  • java笔记_11_JVM调优参数(转载)
    -Xms2048m//设置jvm的初始内存。这个值最好设置的跟-Xmx相同,以避免每次垃圾回收完成后JVM都要重新分配内存-Xmx2048m//JVM最大可用内存-XX:PermSize=256M//设置持久代大小-XX:MaxPermSize=512M//设置最大持久代大小-XX:+PrintGCDetails-XX:+PrintGCDat......
  • linux服务器性能调优(udp为主)
    udp的好处很明显,效率高,减少了建立连接的流程,减少了报文头的占比,也减少了维护连接的开销。缺点就是不稳定,会丢包。还有就是由于udp的高效,导致用于udp的一些应用开发,并发都比较大,更容易丢包。io复用SO_REUSEADDRSO_REUSEPORT创建listener用来监听数据时,有时候需要配置io复用。也......
  • 一文弄懂Flink CDC
    1.CDC概述CDC(ChangeDataCapture)是一种用于捕获和处理数据源中的变化的技术。它允许实时地监视数据库或数据流中发生的数据变动,并将这些变动抽取出来,以便进行进一步的处理和分析。传统上,数据源的变化通常通过周期性地轮询整个数据集进行检查来实现。但是,这种轮询的方式效率低下且......
  • Java面试题 P2:Jvm新能调优
    1、JDK体系结构JDK由:java命令及常用工具+JRE组成(java运行时环境)JRE由:支撑java运行的各种类库+JVM(java运行时环境) 2、为什么java可以跨平台部署跨平台是由java虚拟机,jvm去实现的。 3、Java虚拟机内部组成结构图 java代码运行工作顺序:(1)先通过javac将Math.java编译为......
  • 使用Keras Tuner进行超参数自动调优
    本文将使用Tensorflow中包含的FashionMNIST数据集。该数据集在训练集中包含60,000张灰度图像,在测试集中包含10,000张图像。每张图片代表属于10个类别之一的单品(“T恤/上衣”、“裤子”、“套头衫”等)。因此这是一个多类分类问题。首先我们需要安装keras_tuner,它将......