「Flink」RocksDB介绍以及Flink对RocksDB的支持
RocksDB介绍
RocksDB简介
RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的kv存储LevelDB开发开发。RocksDB使用LSM存储引擎。它针对不同的生产环境进行调优,可以直接使用内存、也可以使用Flash、或者用硬盘或者HDFS。而且支持不同的压缩算法,有一整套的工具用于生产、调试使用。RocksDB是一种嵌入式、KV型、持久化的存储。
使用嵌入式的数据存储原因有很多,当数据频繁访问内存、或者存储时,网络延迟会增加响应时间。
RocksDB的主要应用场景
- 适应于多CPU场景
- 一般的商业服务器有很多的CPU核,例如:志强E5系列 - 6核
- RocksDB可以高效运行在多核服务器上
- 它提供的RocksDB语义比传统DBMS更简单
- 高效利用存储
- RocksDB可以在快速存储上高效运行且不会成为性能瓶颈
- RocksDB采用LSM引擎,对比B-Tree引擎,它有更好的压缩和更小的写放大
- 弹性架构,支持扩展
- 支持IO-bound、in-memory、write-once
入门案例
为了简单说明RocksDB,我们这里使用RocksDB的Java版本来编写。
导入Maven依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni -->
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<version>5.11.3</version>
</dependency>
</dependencies>
基于RocksDB读写数据
public class GettingStartDemo {
    // 因为RocksDB是由C++编写的,在Java中使用首先需要加载Native库
    static {
        // Loads the necessary library files.
        // Calling this method twice will have no effect.
        // By default the method extracts the shared library for loading at
        // java.io.tmpdir, however, you can override this temporary location by
        // setting the environment variable ROCKSDB_SHAREDLIB_DIR.
        // 默认这个方法会加压一个共享库到java.io.tmpdir
        RocksDB.loadLibrary();
    }
    public static void main(String[] args) throws RocksDBException {
        // 1. 打开数据库
        // 1.1 创建数据库配置
        Options dbOpt = new Options();
        // 1.2 配置当数据库不存在时自动创建
        dbOpt.setCreateIfMissing(true);
        // 1.3 打开数据库。因为RocksDB默认是保存在本地磁盘,所以需要指定位置
        RocksDB rdb = RocksDB.open(dbOpt, "./data/rocksdb");
        // 2. 写入数据
        // 2.1 RocksDB都是以字节流的方式写入数据库中,所以我们需要将字符串转换为字节流再写入。这点类似于HBase
        byte[] key = "zhangsan".getBytes();
        byte[] value = "20".getBytes();
        // 2.2 调用put方法写入数据
        rdb.put(key, value);
        System.out.println("写入数据到RocksDB完成!");
        // 3. 调用delete方法读取数据
        System.out.println("从RocksDB读取key = " + new String(key) + "的value为" + new String(rdb.get(key)));
        // 4. 移除数据
        rdb.delete(key);
        // 关闭资源
        rdb.close();
        dbOpt.close();
    }
}
运行程序后,我们可以发现,在data/rocksdb文件夹中,生成了一下几个文件:

- 0000004.sst
- sst是RocksDB的数据存储文件,是二进制格式的
- 0000006.log
- log是预写日志文件,LSM架构引擎都是有预写日志的
- CURRENT
- CURRENT文件是一个文本文件,记录最近的MANIFEST
- IDENTITY
- 存放当前rocksdb的唯一标识
- LOCK
- LOCK 进程的全局锁,DB一旦被open, 其他进程将无法修改
- LOG
- rocksdb的操作日志文件, 可配置定期的统计信息写入LOG. 可通过info_log_level调整日志输出级别; 通过keep_log_file_num限制文件数量 等等。
- LOG.old.15807….
- MANIFECT-000005
- 记录rocksdb最近的状态变化日志。其中包含manifest日志 和最新的文件指针
- OPTIONS-000005
- rocksdb的配置文件
- OPTIONS-000008
Flink使用RocksDBBackend
1、导入Maven依赖
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-statebackend-rocksdb_2.11</artifactId>
<version>1.9.0</version>
</dependency>
2、配置启用RocksDBBackend
// 此处也可以是HDFS路径,这里为了测试方便,所以使用的是本地路径env.setStateBackend(new RocksDBStateBackend("file:///D:/project/java8/data/rocksdb", true));
参考文献:
RocksDB中文网:https://rocksdb.org.cn/
https://rocksdb.org.cn/doc/RocksJava-Basics.html
https://www.jianshu.com/p/2638e2b379c3
https://www.jianshu.com/p/3302be5542c7
「Flink」RocksDB介绍以及Flink对RocksDB的支持的更多相关文章
- SpringCloud-服务注册中心「Eureka」的介绍与使用
		Eureka 两大组件 
- 「PHP」设计模式介绍
		引言 最近再看PHP设计模式相关的一些技术文章,网上有关PHP的设计模式范例很少,这里做一些总结仅供参考,不足之处望提出. 参考资料: <大话设计模式>程杰 什么是设计模式 设 ... 
- 面试都在问的「微服务」「RPC」「服务治理」「下一代微服务」一文带你彻底搞懂!
		❝ 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ❞ 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程 ... 
- Flink入门(二)——Flink架构介绍
		1.基本组件栈 了解Spark的朋友会发现Flink的架构和Spark是非常类似的,在整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富 ... 
- 「译」JUnit 5 系列:条件测试
		原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ... 
- 「译」JUnit 5 系列:扩展模型(Extension Model)
		原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ... 
- 「JavaScript」四种跨域方式详解
		超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ... 
- 「2014-2-6」TokuMX and MongoDB related materials collection
		简介参考 TokuMX 和 MongoDB 各自的官方站点. ## Tokutek 最重要的特点和 marketing word 是所谓 fractal tree indexing te ... 
- Flink资料(1)-- Flink基础概念(Basic Concept)
		Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ... 
随机推荐
- [集训]Trominoes,钩子公式运用
			题意 用这四种骨牌密铺n*m的正方形矩阵,可以不选,求方案数.n*m<=1E8.多组询问. 思考 用如上的表达难以进行计算,尝试转化为一种新的组合解释. 若从右上角开始填起,我们强制要求里面的轮 ... 
- 关于MySQL5.6配置文件my-default.ini不生效问题
			一.问题描述 首先,由于工作要求,需使用MySQL5.6版本(绿色版),从解压到修改root密码,一切都很顺利,但是在我要修改mysql的最大连接数的时候,出现问题了,配置不生效.完蛋.还好有万能的百 ... 
- GC原理---垃圾收集器
			垃圾收集器 如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现 Serial收集器 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收.新生代.老 ... 
- phpstudy切换的php7.1版本php-cgi报错
			phpstudy切换的php7.1版本php-cgi报错 是因为没有装对应vc的插件. 下载地址:https://www.microsoft.com/zh-CN/download/details.as ... 
- python笔记11
			今日内容 函数小高级 lambda 表达式 内置函数 内容回顾 函数基本结构 参数 形参 基本参数:def func(a1,a2):pass 默认值:def func(a1,a2=123):pass ... 
- centos7.6+python3+apache2.4+django2.1.2网站部署总结
			本次网站部署是使用了django2.1.2版本部署,由于centos自带的Python2.7不支持django2.0以上版本,故需要安全python3的环境.python3.apache的安装不做具体 ... 
- 在一个Activity中循环使用一组RadioGroup
			一个activity是用来做题用的,效果如下图 在点击下一题时,RadioGroup会默认为第一次选中的状态,造成RadioButton选择混. 解决方案: 第一步:取消监听 radioGroup_p ... 
- 类与 Object 的应用
			# 类与 Object 的应用 + 面试题 类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现. 以下为类的基本使用: public class Cat { // 私有属性 p ... 
- Linux防火墙之iptables常用扩展匹配条件(一)
			上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ... 
- Django部署--uwsgi配置--nginx服务器配置
			uwsgi.ini文件 [uwsgi] #使用nginx连接时使用,Django程序所在服务器地址 socket=127.0.0.1:8000 #直接做web服务器使用,Django程序所在服务器地址 ... 
