flink调优之RocksDB设置.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Flink 调优之 RocksDB 设置 Flink 是一个流处理引擎,它可以处理高-throughput 和低延迟的数据流。RocksDB 是 Flink 中的一个状态后端,它基于 LSM Tree 实现,写数据都是先缓存到内存中,然后才写入磁盘中。RocksDB 使用内存结合磁盘的方式来存储数据,每次获取数据时,先从内存中 blockcache 中查找,如果内存中没有再去磁盘中查询。 一、开启监控 RocksDB 的写请求效率比较高,但是性能瓶颈主要在于 RocksDB 对磁盘的读请求,每次读写操作都必须对数据进行反序列化或者序列化。当处理性能不够时,仅需要横向扩展并行度即可提高整个 Job 的吞吐量。 Flink 1.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 //将状态名作为变量 二、RocksDB 状态优化 RocksDB 是目前唯一可用于支持有状态流处理应用程序增量检查点的状态后端。可以修改参数开启增量检查点: * state.backend.incremental:true //默认 false,可以改为 true * 或代码中指定 new EmbededRocksDBStateBackend(true) 开启本地恢复: * 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(true)。
剩余6页未读,继续阅读
- 粉丝: 1
- 资源: 2837
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助