如何在 Flink 中规划 RocksDB 内存容量?

本文描述了一些配置选项,这些选项将帮助您有效地管理规划 Apache Flink 中 RocksDB state backend 的内存大小。在前面的文章[1]中,我们描述了 Flink 中支持的可选 state backend 选项,本文将介绍跟 Flink 相关的一些 RocksDB 操作,并讨论一些提高资源利用率的重要配置。

Tips:从 Flink 1.10 开始,Flink 自动管理 RocksDB 的内存,详细介绍如下:

https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/state/state_backends.html#memory-management

RocksDB 的状态后端

在深入了解配置参数之前,先回顾一下在 Apache Flink 中如何使用 RocksDB 来进行状态管理。当选择 RocksDB 作为状态后端时,状态将作为序列化字节串存在于堆外内存(off-heap) 存储或本地磁盘中。

RocksDB 是一个以日志合并树( LSM 树)作为索引结构的 KV 存储引擎。当用于在 Flink 中存储 kv 状态时,键由 的序列化字节串组成,而值由状态的序列化字节组成。每次注册 kv 状态时,它都会映射到列族(column-family)(类似于传统数据库中的表),并将键值对以字节串存储在 RocksDB 中。这意味着每次读写(READ or WRITE)操作都必须对数据进行反序列化或者序列化,与 Flink 内置的 in-memory 状态后端相比,会有一些性能开销。

使用 RocksDB 作为状态后端有许多优点:

  • 不受 Java 垃圾回收的影响,与 heap 对象相比,它的内存开销更低,并且是目前唯一支持增量检查点(incremental checkpointing)的选项。
  • 使用 RocksDB,状态大小仅受限于本地可用的磁盘空间大小,这很适合 state 特别大的 Flink 作业。

下面的图表将进一步阐明 RocksDB 的基本读写操作。

RocksDB 的一次写入操作将把数据写入到内存的 MemTable 中。当 MemTable 写满时,它将成为 READ ONLY MemTable,并被一个新申请的 MemTable 替换。只读 MemTable 被后台线程周期性地刷新到磁盘中,生成按键排序的只读文件,这便是所谓的 SSTables。这些 SSTable 是不可变的,通过后台的多路归并实现进一步的整合。如前所述,对于 RocksDB,每个注册状态都是一个列族,这意味着每个状态都包含自己的 MemTables 和 SSTables 集。

rocksdb.jpeg

RocksDB 中的读取操作首先访问活动内存表(Active Memory Table)来反馈查询。如果找到待查询的 key,则读取操作将由新到旧依次访问,直到找到待查询的 key 为止。如果在任何 MemTable 中都找不到目标 key,那么 READ 操作将访问 SSTables,再次从最新的开始。SSTables 文件可以:

  1. 优先去 RocksDB 的 BlockCache 读取;
  2. 如果 BlockCache 没有的话,就去读操作系统的文件,这些文件块又可能被操作系统缓存了;
  3. 最差的情况就是去本地磁盘读取;
  4. SST 级别的 bloom filter 策略可以避免大量的磁盘访问。

## 管理 RocksDB 内存的 3 种配置

现在,我们理解了 Flink 和 Rocksdb 的协作机制,接下来看看可以更有效地管理 RocksDB 内存大小的配置选项有哪些?请注意,下面的选项并不详尽,因为您可以使用 Apache Flink 1.6 中引入的 state TTL(Time To Live)功能来规划 Flink 应用程序的状态大小。

以下三种配置可以有效帮助您管理 Rocksdb 的内存开销:

1.block_cache_size 的配置

此配置最终将控制内存中缓存的最大未压缩块数。随着块数的不断增加,内存大小也会增加。因此,通过预先配置,您可以保持固定的内存消耗水平。

2.write_buffer_size 的配置

这种配置控制着 RocksDB 中 MemTable 的最大值。活跃 MemTables 和只读的 MemTables 最终会影响 RocksDB 中的内存大小,所以提前调整可能会在以后为您避免一些麻烦。

3.max_write_buffer_number 的配置

在 RocksDB 将 MemTables 导出到磁盘上的 SSTable 之前,此配置决定并控制着内存中保留的 MemTables 的最大数量。这实际上是内存中“只读内存表“的最大数量。

除了上面提到的资源之外,您还可以选择配置索引和 bloom 过滤器,它们将消耗额外的内存空间, Table 级别的 Cache 也是一样。

在这里,Table 缓存不仅会额外占用 RocksDB 的内存,还会占用 SST 文件的打开文件描述符,(在默认情况下设置的大小是不受限制的),如果配置不正确,可能会影响操作系统的设置。

我们刚刚给您指导了一些使用配置选项,这些配置有助于高效管理 RocksDB 作为 Flink statebackend 的内存大小。有关更多配置选项,我们建议查看 RocksDB 优化指南[2]或 Apache Flink 文档。

参考资料:

[1] https://www.ververica.com/blog/stateful-stream-processing-apache-flink-state-backends
[2] https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

能力差的程序员90%输在这点上!CTO:其实都是瞎努力!

在大数据浪潮当中,数据分析是这个时代的不二“掘金技能”。我们每一个人,每天无时无刻都在生产数据,一分钟内,微博上新发的数据量超过10万,b站的视频播放量超过600万......这些庞大的数字,意味着什么&#…

DNS高可用设计--软件高可用

DNS是网络的基础服务,网络上的各种应用对DNS的依赖性很高。DNS的稳定,直接决定了上层应用服务的稳定。那如何保障DNS服务的高可用呢? 我们先来看下高可用的概念: 高可用 高可用(High availability)&#…

十年磨一剑!支付宝自研数据库OceanBase通过阿里云向全球开放

近日,由支付宝自研的金融级分布式数据库OceanBase正式通过阿里云向全球开放,提供高可用、高性能、低成本的计算服务,企业可在云上获得“支付宝同款”的世界顶级数据库处理能力。 数据库和操作系统一样,是IT行业的重要基础软件&am…

20张图,带你搞懂高并发中的线程与线程池!

来源 | 码农的荒岛求生从这篇开始将会开启高性能、高并发系列,本篇是该系列的开篇,主要关注多线程以及线程池。一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念&…

React 常用UI库

流行的开源React UI组件库 http://www.material-ui.com/#/ 组件总览 - Ant Designhttps://ant.design/components/overview-cn/ 安装方式:yarn add antd ## 按需加载antd库样式 1. 安装:yarn add react-app-rewired customize-cra 2. 修改 package.j…

蚂蚁金服自研分布式关系数据库OceanBase上线阿里云

OceanBase于2020年3月在阿里云上完成了商业化,在公有云上正式对外开放。同步上线的还有相关的生态产品,包括集群管控(OCP:OceanBase Cloud Platform),诊断(OTA:OceanBase Tunning Advisor)&…

【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 突如其来的新冠病毒来势汹汹,给这届学生带来了梦寐以求的超长豪华假期,同时也让毕业生的论文答辩及毕…

从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了

来源 | 网络工程师笔记前言今天和大家一起谈谈“网络”,之前写的文章可能不太通俗易懂,有人就问我可不可以写些比较容易理解的文章,我想了想那就从头说起吧!那么什么是网络呢?百度百科的定义:网络是由若干节…

升级遗留代码的最佳实践

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在传统企业甚至互联网企业中往往存在大量的遗留代码,这些遗留代码大多都能够正常工作,有的可能还运行…

字节、腾讯、阿里的开发为啥都在用Python?网友:又酸又香!

毋庸置疑,Python越来越被认可为程序员新时代的风口语言。 无论是刚入门的程序员,还是年薪百万的 BATJ 的大牛都无可否认:Python的应用能力是成为一名码农大神的必要项。 所以,很多程序员把Python当做第一语言来学习。 但对于Pytho…

【新冠疫情】5G到底能为抗疫做点啥,这篇文章终于讲清楚了

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 3月24日,工信部网站发布关于推动5G加快发展的五方面18条措施,其中包括推动“5G医疗健康”创新发展。 …

美甲帮:数加平台打造大数据架构

公司简介 美甲帮是牧云网络旗下一款专注美甲行业的社区型垂直电商APP,其核心业务包括美甲资讯、美甲行业认证、培训教学、商城、招聘等板块,目前已汇聚全国80%的美甲师,覆盖国内90%的美甲店,数以百万计的美甲从业人员和爱好者在此…

在容器上构建持续部署,这份超详细实践指南不要错过!

作者 | 倚天码农责编 | 刘静出品 | CSDN 博客要想理解持续集成和持续部署,先要了解它的部分组成,以及各个组成部分之间的关系。下面这张图是我见过的最简洁、清晰的持续部署和集成的关系图。图片来源(https://www.sonatype.com/products-over…

docker nacos mysql nginx 集群一台

文章目录服务器编排一、mysql1. 创建挂载目录2. 赋予权限3. 运行容器4. 创建数据库5. 初始化脚本二、nacos-cluster2.1. nacos-cluster012.2. nacos-cluster022.3. nacos-cluster03三、nginx3.1. 运行临时容器3.2. 配置拷贝3.3. 删除临时容器3.4. 添加配置3.5. 运行容器四、验证…

世界备份日,您的数据足够安全吗?

据IDC的统计数字表明:发生过机房灾难的公司中,有55%立即倒闭,剩下的45%中,因为数据丢失,有29%也在两年之内倒闭,生存下来的仅占16%。Gartner Group的数据也表…

急速上线 Serverless 钉钉机器人“防疫精灵”

新型冠状病毒疫情肆虐的春节,大家都过得人心惶惶,作为被关在家的程序狗,总觉得要做点什么。于是阿里云 IoT 事业部的几个同学就开始了防疫精灵的开发之路。 从点子到防疫宝,只花了一个下午时间;从防疫宝到钉钉全域机器…

可怕!公司部署了一个东西,悄悄盯着你……

来源 | 编程技术宇宙责编 | Carol封图 | CSDN付费下载自视觉中国我是一个网络监控软件,我被开发出来的使命就是监控网络中进进出出的所有通信流量。这个网络中所有人的上网内容我都看的清清楚楚,是不是很可怕?我被一家公司老板买来运行在一个…

docker nacos mysql nginx 集群多台

文章目录服务器编排一、mysql1. 创建挂载目录2. 赋予权限3. 运行容器4. 创建数据库5. 初始化脚本二、nacos-cluster2.1. 192.168.92.1292.2. 192.168.92.1322.3. 192.168.92.133三、nginx3.1. 运行临时容器3.2. 配置拷贝3.3. 删除临时容器3.4. 添加配置3.5. 运行容器四、验证和…

【开发者成长】5 分钟搞定 Linux 正则表达式

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell…

【开发者成长】每个人都在编写草率代码

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 所有开发人员都认为自己写的代码完全能让人看懂,然而,他们却无法解密彼此的代码(更不用说维护代码了)…