一、开启监控

RocksDB是基于LSM Tree实现的,写数据都是先缓存到内存中,所以RocksDB的写请求效率比较高。RocksDB使用内存结合磁盘的方式来存储数据,每次获取数据时,先从内存中blockcache中查找,如果内存中没有再去磁盘中查询。使用

RocksDB时,状态大小仅受可用磁盘空间量的限制,性能瓶颈主要在于RocksDB对磁盘的读请求,每次读写操作都必须对数据进行反序列化或者序列化。当处理性能不够时。仅需要横向扩展并行度即可提高整个Job的吞吐量。

flink1.13中引入了State访问的性能监控,即latency tracking state、此功能不局限于State Backend的类型,自定义实现的State Backend也可以复用此功能。

state访问的性能监控会产生一定的性能影响,所以默认每100次做一次抽样sample,对不同的state Backend性能损失影响不同。

对于RocksDB State Backend,性能损失大概在1%左右

对于heap State Backend,性能损失最多可达10%(内存本身速度比较快,一点损失影响就很大)

关于性能监控的一些参数,正常开启第一个参数即可,

state.backend.latency-track.keyed-state-enabled:true   //启用访问状态的性能监控

state.backend.latency-track.sample-interval:100            //采样间隔

state.backend.latency-track.histroy-size:128                  //保留的采样数据个数,越大越精确

state.backend.latency-track.state-name-as-variable:true  //将状态名作为变量

0代表是任务编号,filter.visit-state是定义的状态的变量名

有很多这种统计值可以查看,中位值,75分位值等。

二、RocksDB状态优化

①开启增量检查点:

RocksDB是目前唯一可用于支持有状态流处理应用程序增量检查点的状态后端,可以修改参数开启增量检查点:

state.backend.incremental:true  //默认false,可以改为true

或代码中指定 new EmbededRocksDBStateBackend(true)

②开启本地恢复:当flink任务失败时,可以基于本地的状态信息进行恢复任务。可能不需要从hdfs拉取数据。本地恢复目前仅涵盖键值类型的状态后端(RocksDB)。MemoryStateBackend不支持本地恢复并忽略此选项

state.backend.local-recovery:true

③如果你有多块磁盘,可以考虑指定本地多目录

state.backend.rocksdb.localdir:

/data1/flink/rocksdb,/data2/flink/rocksdb,/data3/flink/rocksdb

不要配置单块磁盘的多个目录,务必将目录配置到多块不同的磁盘上,让多块磁盘来分担io压力

三、增量检查点优化效果案例

提交一个任务,具体参数如下

bin/flink run \

-t yarn-per-job \

-d \

-p 5 \

-Dyarn.application.queue=test \

-Djobmanager.memory.process.size=2048mb \

-Dtaskmanager.memory.process.size=4096mb \

-Dtaskmanager.numberOfTaskSlots=2 \

-Dstate.backend.latency-track.keyed-state-enabled=true \      //开启状态监控

-c com.xxx.xxx.Demo \

在flink ui查看状态的监控

然后重新提交任务,在提交时增加参数:

-Dstate.backend.incremental=true  \                      //开启增量检查点

-Dstate.backend.local-recovery=true \                    //开启本地恢复

代码中增加 env.setStateBackend(new EmbeddedRocksDBStateBackend())   //状态后端使用RocksDB

查看两张图的checkpointed data size,可以发现,第一次任务(第一张图)checkpoint时是全量备份,所以状态是越来越大的,从1m+增加到了3m+, 而第二次任务它每次checkpoint的状态大小是有大有小的,范围在200kb-1.2m之间

再查看End to End Duration,第一次任务的状态后端是内存存储,而时间却略大于第二次任务,说明增量的RocksDB的效果有可能好于全量的memory

四、调整RockSDB的预定义选项。

预定义选项就是一个选项集合,如果调整预定义选项达不到预期,再去调整block、writebuffer等参数。

当前支持的预定义选项有支持的选项有:

DEFAULT

SPINING_DISK_OPTIMIZED

SPINNING_DISK_OPTIMIZED_HIGH_MEM

FLASH_SSD_OPTIMIZED  (有条件使用ssd的可以使用这个选项)

我们一般使用第三个SPINNING_DISK_OPTIMIZED_HIGH_MEM,设置为机械硬盘+内存模式

该模式下flink会帮我们设置一些它认为比较ok的参数(选项集合),具体如下:

可以在提交任务时指定

state.backend.rocksdb.predefined-options:SPINNING_DISK_OPTIMIZED_HIGH+MEN

也可以在代码中指定:

EmbededRocksDBStateBackend embededRocksDBStateBackend = new EmbededRocksDBStateBackend();

EmbededRocksDBStateBackend,setPredefinedOptions(PredefinedOptions.SPINNING_DISK_OPTIMIZED_HIGH_MEM);

env.setStateBackend(embeddedRocksDBStateBackend);

flink调优之RocksDB设置的更多相关文章

  1. Spark性能调优之合理设置并行度

    Spark性能调优之合理设置并行度 1.Spark的并行度指的是什么?     spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!     当分配 ...

  2. Flink调优

      第1章 资源配置调优 Flink性能调优的第一步,就是为任务分配合适的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略. ...

  3. 生产环境下JVM调优参数的设置实例

    JVM基础:生产环境参数实例及分析 原始配置: -Xms128m -Xmx128m -XX:NewSize=64m -XX:PermSize=64m -XX:+UseConcMarkSweepGC - ...

  4. JVM调优及参数设置

    (1)参数 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 -Xmn :年轻代大小 整个堆大小=年轻代大小 + 年老代大小 + 持 ...

  5. Linux系统调优及安全设置

    1.关闭SELinux #临时关闭 setenforce 0 #永久关闭 vim /etc/selinux/config SELINUX=disabled 2.设定运行级别为3 #设定运行级别 vim ...

  6. nginx调优buffer参数设置

    内容来自 https://blog.tanteng.me/2016/03/nginx-buffer-params/.有空再详细了解 Nginx性能调优之buffer参数设置 打开Nginx的error ...

  7. Tomcat性能调优 通过ExpiresFilter设置资源缓存

    转自 http://www.cnblogs.com/daxin/p/3995287.html [简介] ExpiresFilter是Java servlet API 当中的一部分,它负责控制设置res ...

  8. 22.centos7基础学习与积累-008-系统调优及安全设置

    从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 1.关闭selinux功能: SELinux(Securety-EnhancedLi ...

  9. Linux之【安装系统后的调优和安全设置】

    关闭SElinux功能 •修改配置文件使其永远生效 第一种修改方法vi vi /etc/sysconfig/selinuc 或者 vi /etc/selinux/config修改: SELINUX=d ...

随机推荐

  1. DAViCal 跨站请求伪造漏洞

    受影响系统:DAViCal DAViCal <= 1.1.8描述:CVE(CAN) ID: CVE-2019-18346 DAViCal是一款日历共享服务器. DAViCal 1.1.8及之前版 ...

  2. kubernetes修改ingress默认端口

    kubectl edit daemonset nginx-ingress-controller -n ingress-nginx containers: - args: - /nginx-ingres ...

  3. SQL Server 2008安全加固手册

    1.身份鉴别 1.1避免使用空密码和弱口令 要求:应对登录操作系统和数据库系统的用户进行身份标识和鉴别. 目的:操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期 ...

  4. 使用Cobalt Strike来钓鱼(MS Office Macro)

    Cobalt Strike操作 点击Cobalt Strike主界面中attacks->packages->ms office macro 弹出界面选择Listener,单机确定 对话框中 ...

  5. GO后端开发+VUE实列

    因为我是从java转到go,代码结构跟我之前用java的很像 在这里只浅显的实战运用,没有过多理论讲解 工作环境:IDE:Goland , Go 1.17.7 框架 Gin+Gorm ,前端VUE 这 ...

  6. Gradle Gretty进行runAppDebug的Listening for transport dt_socket at address: 5005 的后续配置

    出现 Listening for transport dt_socket at address: 5005:代表debug端口已启动好了,接下来你需要进行配置远程Debug,进行附加Debug进程: ...

  7. consumer 是推还是拉?

    Kafka 最初考虑的问题是,customer 应该从 brokes 拉取消息还是 brokers 将消 息推送到 consumer,也就是 pull 还 push.在这方面,Kafka 遵循了一种大 ...

  8. redis支持哪些数据类型?redis命令大全

    一.redis支持的数据类型 1)String 常用命令:set/get/decr/incr/mget等: 应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类: ...

  9. String类有哪些常用的方法

    String类常用方法 1.String类长度:String没有length的属性,有length()这个方法,可以获取字符串的长度. 可以求得字符串s的长度,但是该长度会包含空格. 2.indexO ...

  10. JavaScript 焦点事件

    焦点事件,当一个元素(比如链接或表单)得到或失去焦点时发生. 实例: 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...