interview_bak

flink内存管理

JVM 存在的几个问题:

  • Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。
  • Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大内存空间的JVM来说,GC 会达到秒级甚至分钟级。
  • OOM 问题影响稳定性。OutOfMemoryError是分布式计算框架经常会遇到的问题,当JVM中所有对象大小超过分配给JVM的内存大小时,就会发生OutOfMemoryError错误,导致JVM崩溃,分布式框架的健壮性和性能都会受到影响。

flink内存管理针对实时场景做了哪些优化

积极的堆外内存管理,因为流处理注重低延迟,为每一条要处理的数据在堆内存上创建对象会触发频繁的gc,导致处理停滞

  • flink在堆外开辟network buffer(专门存放缓冲数据)
  • 开辟managed memory,用于排序,缓存中间值

在这里插入图片描述

怎么定位背压

flink拓扑图,Flink的下游算子无法及时处理上游的消息时会出现反压的提示。反压提示一般有OK,LOW,HIGH三种状态。某个算子的BackPressure指标如果是HIGH,说明后面的算子存在性能问题。在任务性能调优时,对于串在一起的算子(Flink会对并发度一样,在同一个slotgroup下,且允许和其他链在一起的算子进行串联)可以disableChaining,然后分析各个算子的性能。
在这里插入图片描述
ratio计算原理

怎么处理背压

  1. 增加并行度
    增加下游任务的并行度可以帮助提高处理速度,从而减轻背压。这可以通过配置更多的 Task Slots 或调整并行度参数来实现。

  2. 调整缓冲区大小
    Flink 允许调整网络缓冲区的大小。通过增加缓冲区大小,可以为下游任务提供更多的缓冲空间来处理突发的数据。然而,这只是临时缓解背压的方法,并不能从根本上解决问题。

  3. 优化代码
    检查下游任务的代码,看是否有优化空间。有时候,算子的代码可能存在性能瓶颈,如不必要的数据转换、低效的算法或过多的状态访问。优化这些代码可以提高处理速度。
    写redis,mget和mset,要

  4. 使用异步 I/O
    对于涉及外部系统调用的操作,使用异步 I/O 可以避免阻塞任务的执行线程。Flink 提供了异步 I/O API,允许你以异步方式执行数据库查询、HTTP 请求等操作。

  5. 调整 Checkpoint 配置
    首先说明checkpoint和反压的关系,checkpoint分为对齐和非对齐,对齐的checkpoint会阻断快流的消费,非对齐的checkpoint是把快流数据缓存下来,

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左林右李02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值