rocksdb

RocksDB Java Example

|▌冷眼眸甩不掉的悲伤 提交于 2021-02-16 03:43:19
RocksDB属于嵌入式数据库,没有网络交互接口,必须和服务部署在同一台服务器。RocksDB是Facebook公司在LevelDB基础之上开发的一个嵌入式KV系统,在很多方面对LevelDB做了优化和增强,更像是一个完整的产品。有如下特征: 高性能 : RocksDB使用日志结构的数据库引擎,完全用C++编写,以获得最大的性能。 键和值是任意大小的字节流。 为快速存储而优化 : RocksDB针对快速、低延迟的存储(如闪存驱动器和高速磁盘驱动器)进行了优化。RocksDB充分利用了flash或RAM提供的高读/写速率的潜力。 适应性强 : RocksDB 可以适应不同的工作负载。 从 MyRocks 等数据库存储引擎到应用程序数据缓存到嵌入式工作负载,RocksDB 可以用于满足各种数据需求。 基础和高级数据库操作 : RocksDB提供了一些基本操作,比如打开和关闭数据库,读与写,合并和压缩过滤器等高级操作。 参考了如下文档: RocksJava Basics Java RocksDB简单入门 Maven依赖(pom.xml) <dependency> <groupId>org.rocksdb</groupId> <artifactId>rocksdbjni</artifactId> <version>6.6.4</version> </dependency> 完整代码示例

一文读懂Flink容错数据流

放肆的年华 提交于 2021-02-11 21:02:59
Flink容错数 据流概念 有状态的函数和操作需要存储计算相关的数据,这使得状态成为复杂计算的关键。在 Flink 中的每一种函数和操作都可以成为有状态的。为了达到很好的容错,Flink 的容错机制持续的记录分布式的数据流的快照。这些快照是非常轻量化的,因此高频的记录快照并不会影响性能。当进程由于机器,网络甚至是软件异常而失败的时候,Flink 会停止数据流。系统重启操作同时将他们恢复到最近的快照点。输入流也会被设置到记录快照点那个时间点,通俗点说就是一条记录不会存在于快照中同时还在数据流中等待被处理。 问题1:哪些函数是有状态的? 问题2:为什快照是非常轻量化的? 问题3:快照如何设置异步的? 问题4:如何在配置中设置多个快照 问题5:快照支持哪几种方式,如何配置 问题6:Checkpoint和Snapshots如何使用 Checkpointing Flink 容错机制的核心就是,记录分布式的数据流和状态的一致性快照。通过这些快照,系统可以从失败中恢复回来 屏障Barriers Flink分布式快照的一个核心元素是流屏障。这些屏障被注入到数据流中,并将记录作为数据流的一部分。障碍永远不会超过记录,它们严格按照顺序流动。一个屏障将数据流中的记录分隔为进入当前快照的记录集和进入下一个快照的记录集。每个屏障都携带快照的ID,快照将快照的记录推到它前面。屏障不会中断流,因此非常轻

为什么是NewSQL?

不想你离开。 提交于 2021-02-10 18:35:42
想必看到此篇的同学对于newSQL已经不是很陌生了,那么直接进入今天的主题: mysql的问题在哪? 一、不能通过mysql的server把InnoDB变成一个分布式数据库。 因为mysql生成的执行计划是个单机的 二、一个分布式的plan执行起来很复杂且低效。 比如使用分布式方案Proxy,因为它不支持分布式的transaction,也不支持跨节点的join 三、异步或半同步复制 因为有时候数据出问题你不知道是否应该切换节点,因为异步的方式会导致一部分数据“还在路上”。尤其是对于多数据中心的复制和数据中心的容灾。 而NewSQL真正发展起来是在2014年末到2015年初的时候,Raft论文发表之后,真正的NewSQL理论基础就基本确立了。 那么从技术实现的角度分析,为什么这样的技术会诞生呢?它又能解决哪些过去的产品解决不了或者不是最优方案的场景呢? 首先,举一个范围查询的例子,如果要查找一个班级里成绩在80-90之间的学生,那么通过KV的API的要很麻烦的,但是SQL的优化器就很容易解决此类问题,写一句SQL就可以搞定。 其次是高可用,未来的系统肯定是要设计成Auto-Failover的,即自动恢复,需要人工去干预的容灾系统不是好厨子。 然后针对业务还要说几点: 比如按照ID去分库分表,比如使用一致性哈希去指导节点均衡。如果问题上升到了一定的复杂度

Flink 消息聚合处理方案

风格不统一 提交于 2021-02-06 07:51:50
Flink 消息聚合处理方案 曹富强 / 张颖 Flink 中文社区 微博机器学习平台使用 Flink 实时处理用户行为日志和生成标签,并且在生成标签后写入存储系统。为了降低存储系统的 IO 负载,有批量写入的需求,同时对数据延迟也需要进行一定的控制,因此需要一种有效的消息聚合处理方案。 在本篇文章中我们将详细介绍 Flink 中对消息进行聚合处理的方案,描述不同方案中可能遇到的问题和解决方法,并进行对比。 基于 flatMap 的解决方案 这是我们能够想到最直观的解决方案,即在自定义的 flatMap 方法中对消息进行聚合,伪代码如下: 对应的作业拓扑和运行状态如下: 该方案的优点如下: 逻辑简单直观,各并发间负载均匀。 flatMap 可以和上游算子 chain 到一起,减少网络传输开销。 使用 operator state 完成 checkpoint,支持正常和改并发恢复。 与此同时,由于使用 operator state,因此所有数据都保存在 JVM 堆上,当数据量较大时有 GC/OOM 风险。 使用 Count Window 的解决方案 对于大规模 state 数据,Flink 推荐使用 RocksDB backend,并且只支持在 KeyedStream 上使用。与此同时,KeyedStream 支持通过 Count Window 来实现消息聚合,因此 Count

Flink State 最佳实践

会有一股神秘感。 提交于 2021-02-06 07:51:20
Flink State 最佳实践 唐云(茶干) Flink 中文社区 本文主要分享与交流 Flink 状态使用过程中的一些经验与心得,当然标题取了“最佳实践”之名,希望文章内容能给读者带去一些干货。本文内容首先是回顾 state 相关概念,并认识和区别不同的 state backend;之后将分别对 state 使用访问以及 checkpoint 容错相关内容进行详细讲解,分享一些经验和心得。 State 概念回顾 我们先回顾一下到底什么是 state,流式计算的数据往往是转瞬即逝, 当然,真实业务场景不可能说所有的数据都是进来之后就走掉,没有任何东西留下来,那么留下来的东西其实就是称之为 state,中文可以翻译成状态。 在下面这个图中,我们的所有的原始数据进入用户代码之后再输出到下游,如果中间涉及到 state 的读写,这些状态会存储在本地的 state backend(可以对标成嵌入式本地 kv 存储)当中。 接下来我们会在四个维度来区分两种不同的 state:operator state 以及 keyed state。 是否存在当前处理的 key(current key):operator state 是没有当前 key 的概念,而 keyed state 的数值总是与一个 current key 对应。 存储对象是否 on heap: 目前 operator state

Kafka Streams limiting off-heap memory

99封情书 提交于 2021-02-04 08:27:32
问题 We are running kafka streams applications and frequency running into off heap memory issues. Our applications are deployed and kubernetes PODs and they keep on restarting. I am doing some investigation and found that we can limit the off heap memory by implementing RocksDBConfigSetter as shown in following example. public static class BoundedMemoryRocksDBConfig implements RocksDBConfigSetter { // See #1 below private static org.rocksdb.Cache cache = new org.rocksdb.LRUCache(TOTAL_OFF_HEAP

滴滴 Flink-1.10 升级之路

霸气de小男生 提交于 2021-02-03 11:02:07
简介: 滴滴实时计算引擎从 Flink-1.4 无缝升级到 Flink-1.10 版本,做到了完全对用户透明。并且在新版本的指标、调度、SQL 引擎等进行了一些优化,在性能和易用性上相较旧版本都有很大提升。 一、 背景 在本次升级之前,我们使用的主要版本为 Flink-1.4.2,并且在社区版本上进行了一些增强,提供了 StreamSQL 和低阶 API 两种服务形式。现有集群规模达到了 1500 台物理机,运行任务数超过 12000 ,日均处理数据 3 万亿条左右。 不过随着社区的发展,尤其是 Blink 合入 master 后有很多功能和架构上的升级,我们希望能通过版本升级提供更好的流计算服务。今年 2 月份,里程碑版本 Flink-1.10 发布,我们开始在新版上上进行开发工作,踏上了充满挑战的升级之路。 二、 Flink-1.10 新特性 作为 Flink 社区至今为止的最大的一次版本升级,加入的新特性解决了之前遇到很多的痛点。 1. 原生 DDL 语法与 Catalog 支持 Flink SQL 原生支持了 DDL 语法,比如 CREATE TABLE/CREATE FUNCTION,可以使用 SQL 进行元数据的注册,而不需要使用代码的方式。 也提供了 Catalog 的支持,默认使用 InMemoryCatalog 将信息临时保存在内存中,同时也提供了

RocksDB Java操作

大憨熊 提交于 2021-01-30 10:00:40
RocksDB其实是一种嵌入式的K:V数据库,系统无需安装,之前本人的安装 RocksDB安装 ,其实多此一举。由于RocksDB是C++开发的,它的Java API大多其实只是对C++ API的一种调用。 RocksDB的底层数据结构是一种LSM树,可以参考 LSM树(Log-Structured Merge Tree)存储引擎浅析 首先添加依赖 <dependency> <groupId> org.rocksdb </groupId> <artifactId> rocksdbjni </artifactId> <version> 6.6.4 </version> </dependency> public class Test { static { RocksDB. loadLibrary () ; } private static RocksDB rocksDB ; private static String path = "/Users/admin/Downloads/rowdb" ; public static void main (String[] args) throws RocksDBException { Options options = new Options() ; options.setCreateIfMissing( true ) ; rocksDB =

从B+树到LSM树,及LSM树在HBase中的应用

最后都变了- 提交于 2021-01-29 07:34:24
前言 在有代表性的关系型数据库如MySQL、SQL Server、Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和B+树。而在一些主流的NoSQL数据库如HBase、Cassandra、LevelDB、RocksDB中,则是使用日志结构合并树(Log-structured Merge Tree,LSM Tree)来组织数据。本文先由B+树来引出对LSM树的介绍,然后说明HBase中是如何运用LSM树的。 回顾B+树 为什么在RDBMS中我们需要B+树(或者广义地说,索引)?一句话:减少寻道时间。在存储系统中广泛使用的HDD是磁性介质+机械旋转的,这就使得其顺序访问较快而随机访问较慢。使用B+树组织数据可以较好地利用HDD的这种特点,其本质是多路平衡查找树。下图是一棵高度为3的4路B+树示例。 与普通B树相比,B+树的非叶子节点只有索引,所有数据都位于叶子节点,并且叶子节点上的数据会形成有序链表。B+树的主要优点如下: 结构比较扁平,高度低(一般不超过4层),随机寻道次数少; 数据存储密度大,且都位于叶子节点,查询稳定,遍历方便; 叶子节点形成有序链表,范围查询转化为顺序读,效率高。相对而言B树必须通过中序遍历才能支持范围查询。 当然,B+树也不是十全十美的,它的主要缺点有两个: 如果写入的数据比较离散,那么寻找写入位置时,子节点有很大可能性不会在内存中

Apache Flink 在实时金融数据湖的应用

左心房为你撑大大i 提交于 2021-01-29 04:55:24
简介: 本文由京东搜索算法架构团队分享,主要介绍 Apache Flink 在京东商品搜索排序在线学习中的应用实践 一、背景 在京东的商品搜索排序中,经常会遇到搜索结果多样性不足导致系统非最优解的问题。为了解决数据马太效应带来的模型商品排序多样性的不足,我们利用基于二项式汤普森采样建模,但是该算法仍存在对所有用户采用一致的策略,未有效考虑用户和商品的个性化信息。基于该现状,我们采取在线学习,使深度学习和汤普森采样融合,实现个性化多样性排序方案,实时更新模型的关参数。 在该方案中,Flink 主要应用于实时样本的生成和 online learning 的实现。在在线学习过程中,样本是模型训练的基石,在超大规模样本数据的处理上,我们对比了 Flink、Storm 和 Spark Streaming 之后,最终选择用 Flink 作为实时样本流数据的生产以及迭代 online learning 参数的框架。在线学习的整体链路特别长,涉及在线端特征日志、流式特征处理、流式特征与用户行为标签关联、异常样本处理、模型动态参数实时训练与更新等环节,online learning 对样本处理和参数状态处理的准确性和稳定性要求较高,任何一个阶段都有可能出现问题,为此我们接入京东的 observer 体系,拥有完整的全链路监控系统,保证各个阶段数据的稳定性和完整性