rocksdb使用_flink写入kafka

rocksdb使用_flink写入kafkaRocksDB介绍RocksDB简介RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的

「Flink」RocksDB介绍以及Flink对RocksDB的支持

RocksDB介绍

RocksDB简介

RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的kv存储LevelDB开发开发。RocksDB使用LSM存储引擎。它针对不同的生产环境进行调优,可以直接使用内存、也可以使用Flash、或者用硬盘或者HDFS。而且支持不同的压缩算法,有一整套的工具用于生产、调试使用。RocksDB是一种嵌入式、KV型、持久化的存储。

使用嵌入式的数据存储原因有很多,当数据频繁访问内存、或者存储时,网络延迟会增加响应时间。

RocksDB的主要应用场景

  1. 适应于多CPU场景
    • 一般的商业服务器有很多的CPU核,例如:志强E5系列 – 6核
    • RocksDB可以高效运行在多核服务器上
    • 它提供的RocksDB语义比传统DBMS更简单
  2. 高效利用存储
    • RocksDB可以在快速存储上高效运行且不会成为性能瓶颈
    • RocksDB采用LSM引擎,对比B-Tree引擎,它有更好的压缩和更小的写放大
  3. 弹性架构,支持扩展
  4. 支持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>

代码100分

基于RocksDB读写数据

代码100分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文件夹中,生成了一下几个文件:

image

  • 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

代码100分// 此处也可以是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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10088.html

(0)
上一篇 2023-01-25
下一篇 2023-01-26

相关推荐

  • nvl和ifnull_coalesce和nvl的区别

    nvl和ifnull_coalesce和nvl的区别大家都知道的区别: NVL Oracle 专属 只支持两个参数 COALESCE SQL 标准 支持多个参数 但是今天偶然间还发现一个重要差别:滥用 NVL 可能导致额外的计算 NVL 无论前面的参…

    2023-03-19
    117
  • Python的默认特性

    Python的默认特性Python是一种高级别、解释型、面向对象的语言。它是由Guido van Rossum创建的,并且第一次推出是在1991年。Python的设计思想是“优雅、明确、简单”,它可以让程序员更专注于解决问题而不是语言本身。

    2024-02-11
    48
  • Python字体样式的倾斜:让你的文本变得更加生动

    Python字体样式的倾斜:让你的文本变得更加生动Python是一种广泛应用于各种领域的编程语言。在数据分析、机器学习、Web开发等方面都有着广泛的应用。不仅如此,Python还有很多有趣的功能。比如,Python提供了一种通过改变字体样式来增强文本效果的方法,其中之一是让你的文本倾斜。这篇文章将详细介绍Python字体样式的倾斜技术,以及如何通过应用这项技术来使文本更加生动。

    2023-12-19
    55
  • redis:RDB AOF -master &slave -sentinel-cluster「建议收藏」

    redis:RDB AOF -master &slave -sentinel-cluster「建议收藏」1、RDB和AOF的优缺点 2、master和slave同步过程 3、哨兵的使用和实现机制4、redis cluster集群创建和使用 第一个题目、RDB和AOF的优缺点 一、 RDB的优点1、优点…

    2023-04-06
    94
  • 第10问:怎么查看 mysqlbinlog 的解析进度?「终于解决」

    第10问:怎么查看 mysqlbinlog 的解析进度?「终于解决」问题 mysqlbinlog 是将 binlog 解析成可读可执行的 SQL 的重要工具。 但解析体积较大的 binlog 时,如何查看 mysqlbinlog 的执行进度就变成了一个问题,mysq…

    2023-02-23
    114
  • 探秘MongoDB聚合查询

    探秘MongoDB聚合查询MongoDB是当前最流行的NoSQL数据库之一。在许多场景下,我们经常需要使用聚合查询来对数据进行分析和统计。聚合查询在MongoDB中是非常强大和灵活的,可以通过组合多个聚合操作符,对数据进行复杂的分析和转换。本文将深入介绍MongoDB聚合查询的基本概念和高级用法,通过实例代码和详细的解释,帮助大家更好地掌握MongoDB聚合查询。

    2024-05-09
    11
  • python实现pdf字符分割的简单介绍

    python实现pdf字符分割的简单介绍用split函数:

    2023-11-26
    80
  • mysql什么是锁_概念简单解释一下

    mysql什么是锁_概念简单解释一下1. 锁的粒度 在MySQL中,只要有多个请求需要在同一时刻修改数据,都会产生并发控制的问题。而锁的作用可以保证同一资源能被某个请求唯一使用。 加锁是会消耗系统资源的,包括获得锁、检查锁是否已解除、释

    2023-02-03
    97

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注