rocksdb

Flink 消息聚合处理方案

可紊 提交于 2020-12-12 13:54:08
微博机器学习平台使用 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 Window 成为第二个可选方案。 由于需要使用 KeyedStream

Flink 消息聚合处理方案

时间秒杀一切 提交于 2020-12-12 13:53:53
微博机器学习平台使用 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 Window 成为第二个可选方案。 由于需要使用 KeyedStream

Flink 消息聚合处理方案

醉酒当歌 提交于 2020-12-12 13:32:31
微博机器学习平台使用 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 Window 成为第二个可选方案。 由于需要使用 KeyedStream

cockroach SortedDiskMap类图(临时引擎 rocksdb与pebble实现)

邮差的信 提交于 2020-12-05 09:57:58
1. 临时引擎TempEngine 1.1 rocksdbTempEngine类图 1.1 pebbleTempEngine类图 1.3 引用临时引擎的类 sst_writer_proc.go 导入数据时将数据写入临时引擎. joinreader.go hashjoiner.go sorter.go window.g routers.go 计算过程中用来将数据吐到临时引擎(基于硬盘的Map) 来源: oschina 链接: https://my.oschina.net/u/4324660/blog/4775795

Flink State 误用之痛,你中招了吗?

|▌冷眼眸甩不掉的悲伤 提交于 2020-11-06 16:43:36
简介: 本文主要讨论一个问题:ValueState 中存 Map 与 MapState 有什么区别?如果不懂这两者的区别,而且使用 ValueState 中存大对象,生产环境很可能会出现以下问题:CPU 被打满、吞吐上不去。 本文主要讨论一个问题:ValueState 中存 Map 与 MapState 有什么区别? 如果不懂这两者的区别,而且使用 ValueState 中存大对象,生产环境很可能会出现以下问题: · CPU 被打满 · 吞吐上不去 1、 结论 从性能和 TTL 两个维度来描述区别。 性能 · RocksDB 场景,MapState 比 ValueState 中存 Map 性能高很多。 · 生产环境强烈推荐使用 MapState,不推荐 ValueState 中存大对象 · ValueState 中存大对象很容易使 CPU 打满 · Heap State 场景,两者性能类似。 TTL Flink 中 State 支持设置 TTL: · MapState 的 TTL 是基于 UK 级别的 · ValueState 的 TTL 是基于整个 key 的 举一反三 能使用 ListState 的场景,不要使用 ValueState 中存 List。大佬们已经把 MapState 和 ListState 性能都做了很多优化,高性能不香吗?下文会详细分析 ValueState

HBase/TiDB都在用的数据结构:LSM Tree,不得了解一下?

夙愿已清 提交于 2020-10-29 17:18:23
LSM Tree(Log-structured merge-tree)广泛应用在HBase,TiDB等诸多数据库和存储引擎上,我们先来看一下它的一些应用: 参考资料【4】 这么牛X的名单,你不想了解下LSM Tree吗?装X之前,我们先来了解一些基本概念。 设计数据存储系统可能需要考虑的一些问题有:ACID,RUM(Read,Write,Memory)。 ACID ACID 相信小伙伴都被面试官问过,我想简单讨论的一点是:如何 持久化数据 才能保证数据写入的 事务性 和 读写性能? 事务性可简单理解为:1.数据必须持久化。2.一次数据的写入返回给用户 写入成功就一定成功,失败就一定失败。 读写性能可简单理解为:一次读 或 一次写 需要的IO次数,因为访问速率:CPU>>内存>>SSD/磁盘。 对于单机存储,最简单的方式当然是:写一条就持久化一条,读一条就遍历一遍所有数据,然后返回。当然没人这么干,在内存中我们都还知道用个HashMap呢。 拿Mysql InnoDB举例子: 读性能体现在数据的索引在磁盘上主要用B+树来保证。 写性能体现在运用 WAL机制 来避免每次写都去更新B+树上的全量索引和数据内容,而是通过redo log记录下来每次写的增量内容,顺序将redo log写入磁盘。同时在内存中记录下来本次写入应该在B+树上更新的脏页数据,然后在一定条件下触发脏页的刷盘。

MyRocks及其使用场景分析

孤街浪徒 提交于 2020-10-27 18:34:10
出处:https://zhuanlan.zhihu.com/p/45652076 作者:温正湖(任职于网易杭州研究院,从事数据库内核开发) MyRocks是一种经过空间和写性能优化的MySQL数据库,为您业务的数据库选型提供一种靠谱的选择。本文主要介绍什么是MyRocks,包括其功能特性,重点讲解MyRocks相比InnoDB的优势,详细分析MyRocks适用的各种场景。 RocksDB是FaceBook基于Google开源的LevelDB实现的,使用LSM(Log-Structure Merge)树来存储数据。Facebook开发工程师对RocksDB进行了大量的开发,使其符合MySQL的插件式存储引擎框架的要求,移植到了MySQL上,并称之为MyRocks。MyRocks支持基于SQL的数据读写、锁机制、MVCC、事务、主从复制等MySQL绝大部分功能特性。从使用习惯考虑,使用MyRocks还是使用MySQL/InnoDB并没有多大区别。 经过4年多的发展,MyRocks已经成熟,开源的MySQL分支版本Percona和MariaDB已将MyRocks迁移到自己的MySQL分支中,InnoSQL作为网易的MySQL分支,目前也已支持MyRocks,具体版本为InnoSQL 5.7.20-v4,在开源的MyRocks代码基础上,我们对其做了功能优化增强、bugfix

TiKV正式从CNCF毕业,成为云原生时代构建分布式系统基石

感情迁移 提交于 2020-10-04 23:28:07
今日,云原生计算基金会 ( CNCF ) 宣布 TiKV 正式从 CNCF 毕业。TiKV 是继 Harbor 之后在 CNCF 毕业的第二个中国原创开源项目。从孵化项目晋升为毕业项目,标志着 TiKV 在产品成熟度、项目采用率以及社区持续性等方面取得一系列进展,可应用到各类行业、各种规模的生产环境。 TiKV 是一个开源的分布式事务 Key-Value 数据库,专注为下一代数据库提供可靠、高质量、实用的存储架构。最初由 PingCAP 团队在 2016 年 1 月作为 TiDB 的底层存储引擎设计并开发,第一版于 2016 年 4 月开源。2018 年 8 月被 CNCF 宣布接纳为沙箱云原生项目,在 2019 年 5 月从沙箱晋级至孵化项目。目前,TiKV 已经在知乎、一点资讯、Shopee、美团、京东云、转转等多行业头部企业得到上线应用。 TiKV 通过 Raft 一致性算法来实现数据多副本之间的一致性,本地采用了 RocksDB 存储引擎存储数据,同时 TiKV 支持数据自动切分和迁移。TiKV 的跨行事务最初参考 Google Percolator 事务模型,并进行了一些优化,提供快照隔离与带锁快照隔离,支持分布式事务。TiKV 的核心特性如下: 跨区复制:采用 Raft 协议和 Placement Driver 支持跨区复制。 可扩展性:通过 Raft 复制数据以及

数据库怎么选择?| 文末送书

不问归期 提交于 2020-10-02 22:15:44
武培轩 推荐搜索 MySQLRedisElasticsearchJavaSpring Boot数据结构 所有数据库管理系统的主要工作都是「可靠地存储数据」并使其对用户可用。我们使用数据库作为数据的主要来源,帮助我们在应用程序的不同部分之间共享数据。我们使用数据库,而不是在每次创建新应用程序时寻找存储和检索信息的方法,也不是每次都去发明一种组织数据的新方法。这样一来,我们就可以专注于应用程序逻辑而不是基础设施。 数据库是模块化的系统,由多个部分组成:接受请求的传输层、决定以最高效方式运行查询的查询处理器、执行操作的执行引擎以及存储引擎。 存储引擎(或数据库引擎)是数据库的一个软件组件,它负责在内存和磁盘上存储、检索和管理数据,而设计它的目的是长久保存每个节点的数据[REED78]。数据库可以响应复杂的查询,存储引擎则会更细粒度地看待数据并提供一组简单的数据操作API,允许用户创建、更新、删除和检索数据记录。从某个角度来看,数据库是构建在存储引擎之上的应用程序,它提供了表结构(schema)、查询语言、索引、事务和许多其他有用的特性。 为了获得灵活性,键和值都可以是没有预设格式的任意字节序列。它们的排序和表示语义是在更高级别的子系统中定义的。例如,你可以在一个表中使用int32(32位整数)作为键,而在另一个表中使用ascii(ASCII字符串);从存储引擎的角度来看