【Flink精讲】Flink性能调优:CPU核数与并行度

这篇具有很好参考价值的文章主要介绍了【Flink精讲】Flink性能调优:CPU核数与并行度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见问题

举个例子

提交任务命令:

bin/flink run \
-t yarn-per-job \
-d \
-p 5 \ 指定并行度
-Dyarn.application.queue=test \ 指定 yarn 队列
-Djobmanager.memory.process.size=2048mb \ JM2~4G 足够
-Dtaskmanager.memory.process.size=4096mb \ 单个 TM2~8G 足够
-Dtaskmanager.numberOfTaskSlots=2 \ 与容器核数 1core: 1slot 或 2core: 1slot
-c com.atguigu.flink.tuning.UvDemo \
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

并行度为5,每个任务占用槽数为2,则需要申请3个容器(2*3=6),JobManager需要一个容器,共需要4个容器。6个vcore+JobManager的1个vcore共7个vcore。而实际上是4个容器,4个vcore,这是为什么呢?

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

实际运行效果: 

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

Yarn调度器设置

这跟yarn的调度器设置相关,找到capacity-scheduler.xml

  • default的方式只会参考内存来申请容器,不会考虑cpu的需求。
  • 调整为下面domian的方式,会综合考虑内存+CPU的需求来申请资源。

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

调整后运行效果:

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

刷新一下

 指定容器核心数

bin/flink run \
-t yarn-per-job \
-d \
-p 5 \
-Drest.flamegraph.enabled=true \
-Dyarn.application.queue=test \
-Dyarn.containers.vcores=3 \
-Djobmanager.memory.process.size=1024mb \
-Dtaskmanager.memory.process.size=4096mb \
-Dtaskmanager.numberOfTaskSlots=2 \
-c com.atguigu.flink.tuning.UvDemo \
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

一个容器3个核,2个slot,不是1:1的关系也可以。

slot主要隔离内存,不隔离cpu资源。

solt还有一个共享机制,一个slot可以同时跑多个task,一个solt可以不只使用一个线程。

通常让系统自动来设置,通常跟solt数1比1

并行度设置

  1. 配置文件:默认并行度,默认1
  2. 提交参数:如-p 5
  3. 代码env
  4. 代码算子

优先级下面的高。

全局并行度计算

        开发完成后,先进行压测。任务并行度给 10 以下,测试单个并行度的处理上限。然后
总QPS / 单并行度的处理能力 = 并行度
QPS使用高峰期的。
        开发完 Flink 作业,压测的方式很简单,先在 kafka 中积压数据,之后开启 Flink 任务,
出现反压,就是处理瓶颈。相当于水库先积水,一下子泄洪。
        不能只从 QPS 去得出并行度,因为有些字段少、逻辑简单的任务,单并行度一秒处理
几万条数据。 而有些数据字段多,处理逻辑复杂, 单并行度一秒只能处理 1000 条数据。
最好根据高峰期的 QPS 压测, 并行度*1.2 倍,富余一些资源。

查看单个任务的输出量:numRecordsOutPerSecond,单并行度7000条/秒,生成环境高峰期的qps:30000/s,30000/7000 = 4.x,并行度5,再乘以个冗余1.2 = 6个

flink提交参数cpu 内存,Flink精讲,大数据,Flink,flink,大数据

如果数据源是kafka,可以按kafka分区数来设置并行度。 

大部分情况下并行度10以下即可。

Source 端并行度的配置

        数据源端是 Kafka, Source 的并行度设置为 Kafka 对应 Topic 的分区数。
        如果已经等于 Kafka 的分区数, 消费速度仍跟不上数据生产速度, 考虑下 Kafka 要扩
大分区, 同时调大并行度等于分区数。

        Flink 的一个并行度可以处理一至多个分区的数据,如果并行度多于 Kafka 的分区数,
那么就会造成有的并行度空闲,浪费资源。

Transform 端并行度的配置

Keyby 之前的算子

一般不会做太重的操作,都是比如 map、 filter、 flatmap 等处理较快的算子,并行度
可以和 source 保持一致。

Keyby 之后的算子

如果并发较大,建议设置并行度为 2 的整数次幂,例如: 128、 256、 512;
小并发任务的并行度不一定需要设置成 2 的整数次幂;
大并发任务如果没有 KeyBy,并行度也无需设置为 2 的整数次幂;

Sink 端并行度的配置

        Sink 端是数据流向下游的地方,可以根据 Sink 端的数据量及下游的服务抗压能力进行评估。 如果 Sink 端是 Kafka,可以设为 Kafka 对应 Topic 的分区数。
        Sink 端的数据量小, 比较常见的就是监控告警的场景,并行度可以设置的小一些。
        Source 端的数据量是最小的,拿到 Source 端流过来的数据后做了细粒度的拆分,数据量不断的增加,到 Sink 端的数据量就非常大。那么在 Sink 到下游的存储中间件的时候就需要提高并行度。
        另外 Sink 端要与下游的服务进行交互,并行度还得根据下游的服务抗压能力来设置,如果在 Flink Sink 这端的数据量过大的话, 且 Sink 处并行度也设置的很大,但下游的服务完全撑不住这么大的并发写入,可能会造成下游服务直接被写挂,所以最终还是要在 Sink处的并行度做一定的权衡。文章来源地址https://www.toymoban.com/news/detail-848021.html

到了这里,关于【Flink精讲】Flink性能调优:CPU核数与并行度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flink算子的并行度设置方法

    #flink算子的并行度设置方法 并行度(Parallelism)是flink中一个非常重要的概念,它主要是指一个算子可以被分的子任务数,通常越高就意味着算子计算速度越快。 如上图所示,map()算子的并行度为2,window()算子的并行度也为2,也可以说整个数据流的并行度就是2。并行度的设置

    2024年03月17日
    浏览(51)
  • Flink学习笔记(七)并行度详解

    一个Flink程序由多个任务(Source、Transformation和Sink)组成。一个任务由多个并行实例(线程)来执行,一个任务的并行实例(线程)数目被称为该任务的并行度。 Flink是一个分布式流处理框架,它基于TaskManager和Slot来实现任务的执行。TaskManager是Flink中负责运行任务的工作进程

    2024年02月09日
    浏览(41)
  • 十八、Flink自定义多并行Source

    1、概述 1)作用 自定义多并行的Source,即Source的并行度可以是1到多个。 2)实现 1.继承RichParallelSourceFunction,重写run()方法。 2、代码实现

    2024年02月08日
    浏览(35)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》 学习笔记如下: Flink 中每条消息都会被放到网络缓冲(network buffer) 中,并以此为最小单位发送到下一个 subtask。 Flink 在传输过程的输入端和输出端使用了网络缓冲队列,即每个 subtask 都有一个输入队列来接收

    2024年01月21日
    浏览(57)
  • Flink TaskSlot,算子链和并行度

    Flink TaskSlot,算子链和并行度 (108条消息) Flink TaskSlot与并行度_flink slot和并行度的关系_保护我方胖虎的博客-CSDN博客

    2024年02月15日
    浏览(45)
  • Flink 优化(六) --------- FlinkSQL 调优

    FlinkSQL 官网配置参数: https://ci.apache.org/projects/flink/flink-docs-release-1.13/dev/table/config.html Flink SQL 新手有可能犯的错误,其中之一就是忘记设置空闲状态保留时间导致状态爆炸。列举两个场景: ➢ FlinkSQL 的 regular join(inner、left、right),左右表的数据都会一直保存在状态里,不

    2024年02月14日
    浏览(41)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记

    学习文档: 《Flink 官方文档 - 部署 - 内存配置 - 调优指南》 《Flink 官方文档 - 部署 - 内存配置 - 常见问题》 学习笔记如下: 独立部署模式(Standalone Deployment)下的内存配置 通常无需配置进程总内存,因为不管是 Flink 还是部署环境都不会对 JVM 开销进行限制,它只与机器的

    2024年02月19日
    浏览(44)
  • 【Flink】Flink提交流程

    我们通常在学习的时候需要掌握大数据组件的原理以便更好的掌握这个大数据组件,Flink实际生产开发过程中最常见的就是提交到yarn上进行调度,模式使用的 Per-Job模式,下面我们就给大家讲下Flink提交Per-Job任务到yarn上的流程,流程图如下  (1)客户端将作业提交给 YARN 的资

    2024年02月11日
    浏览(33)
  • Flink-任务槽和并行度的关系

    任务槽 和并行度都跟程序的并行执行有关,但两者是完全不同的概念 。简单来说 任务槽 是静态的概念 ,是指TaskManager具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度是动态概念,也就是TaskManager运行程序时实际使用的并发能力,可以通过参数

    2024年02月11日
    浏览(40)
  • Flink-intervalJoin源码和并行度问题

    底层用的是connect 把两个流的数据先保存到状态中  先判断有没有迟到,迟到就放到侧输出流 再根据范围找数据 然后根据上界删除数据     多个上游,一个下游,下游取最小的 一个上游,多个下游,广播 多个上游,多个下游,先广播,再取最小的 注意:水位线会减1ms 有可

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包