数据处理能力相差 2.4 倍?Flink 使用 RocksDB 和 Gemini 的性能对比实验

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 在本篇文章中我们将对 RocksDB、Heap 和 Gemini 在相同场景下进行压测,并对其资源消耗进行对比。测试的 Flink 内核版本为 1.10.0。

微博机器学习平台使用 Flink 实现多流 join 来生成在线机器学习需要的样本。时间窗口内的数据会被缓存到 state 里,且 state 访问的延迟通常决定了作业的性能。开源 Flink 的状态存储主要包括 RocksDB 和 Heap 两种,而在去年的 Flink Forward 大会上我们了解到阿里云 VVP 产品自研了一款更高性能的状态存储插件 Gemini,并对其进行了测试和试用。

在本篇文章中我们将对 RocksDB、Heap 和 Gemini 在相同场景下进行压测,并对其资源消耗进行对比。测试的 Flink 内核版本为 1.10.0。

测试场景

我们使用真实的样本拼接业务作为测试场景,通过将多个流的数据union后对指定key做聚合(keyby),在聚合函数里从各个流中获取相应的字段,并将需要的字段重新组合成一个新的对象存储到 value state 里。这里对每个新的对象都定义一个 timer,用 timer 功能来替代 TimeWindow,窗口结束时将数据发射到下游算子。使用 timer 功能的主要原因是 timer 更灵活,更方便用户自定义,在平台的实用性,可扩展性上表现更好。

MemoryStateBackend vs. RocksDBStateBackend

首先需要说明的是,MemoryStateBackend 不建议在线上使用,这里主要是通过测试量化一下使用 Heap 存储 state 的资源消耗。

我们在测试中对 checkpoint 的配置如下:

CheckpointInterval:10分钟
CheckpointingMode: EXACTLY_ONCE
CheckpointTimeout:3分钟

同时对 RocksDB 增加了如下配置:

setCompressionType:LZ4_COMPRESSION
setTargetFileSizeBase:128 * 1024 * 1024
setMinWriteBufferNumberToMerge:3
setMaxWriteBufferNumber:4
setWriteBufferSize:1G
setBlockCacheSize:10G
setBlockSize:4 * 1024
setFilter:BloomFilter(10, false)

测试发现,相同作业处理相同的数据量时,使用 MemoryStateBackend 的作业吞吐和 RocksDB 类似(输入 qps 为 30 万,聚合后输出 qps 为 2 万),但所需要的内存(taskmanager.heap.mb)是 RocksDB 的 8 倍,对应的机器资源是 RocksDB 的 2 倍。

1.jpg

由此我们得出以下结论:

  • 使用 MemoryStateBackend 需要增加非常多的 Heap 空间用于存储窗口内的状态数据(样本),相对于把数据放到磁盘的优点是处理性能非常好,但缺点很明显:由于 Java 对象在内存的存储效率不高,GB 级别的内存只能存储百兆级别的真实物理数据,所以会有很大的内存开销,且 JVM 大堆 GC 停机时间相对较高,影响作业整体稳定,另外遇到热点事件会有 OOM 风险。
  • 使用 RocksDB 则需要较少的 Heap 空间即可,加大 Native 区域用于读缓存,结合 RocksDB 的高效磁盘读写策略仍然有很好的性能表现。

GeminiStateBackend vs. RocksDBStateBackend

可以通过如下方式,在 Ververica Platform 产品中指定使用 Gemini state backend:

state.backend=org.apache.flink.runtime.state.gemini.GeminiStateBackendFactory

同时我们对 Gemini 进行了如下基础配置:

// 指定Gemini存储时的本地目录
kubernetes.taskmanager.replace-with-subdirs.conf-keys= state.backend.gemini.local.dir
state.backend.gemini.local.dir=/mnt/disk3/state,/mnt/disk5/state
// 指定Gemini的page压缩格式(page是Gemini存储的最小物理单元)
state.backend.gemini.compression.in.page=Lz4
// 指定Gemini允许使用的内存占比
state.backend.gemini.heap.rate=0.7
// 指定Gemini的单个存储文件大小
state.backend.gemini.log.structure.file.size=134217728
// 指定Gemini的工作线程数
state.backend.gemini.region.thread.num=8

机器配置

2.jpg

作业使用资源对应参数

3.jpg

内存相关参数

4.jpg

对比结果

5.jpg

Note:全量的样本拼接负载使用 16 台机器无法完全服务,因此我们通过对数据进行不同比例的抽样来进行压测。当出现反压时,我们认为作业已经达到性能瓶颈。

结论

由以上对比可以看出,在数据、作业处理逻辑、硬件配置等都相同的前提下,使用 Gemini 成功处理的数据量是 RocksDB 的 2.4 倍(17280 vs 7200 条/s)。同时通过硬件资源消耗的对比可知,RocksDB 更快达到磁盘 IO 瓶颈,而 Gemini 则具备更高的内存和 CPU 利用率。

作者简介:

曹富强、晨馨,微博机器学习研发中心-高级系统工程师。现负责微博机器学习平台数据计算/数据存储模块,主要涉及实时计算 Flink、Storm、Spark Streaming,数据存储Kafka、Redis,离线计算 Hive、Spark 等。目前专注于Flink/Kafka/Redis在微博机器学习场景的应用,为机器学习提供框架,技术,应用层面的支持。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3月前
|
数据处理 数据库 流计算
Flink-CDC 的性能与许多因素有关
【1月更文挑战第23天】【1月更文挑战第114篇】Flink-CDC 的性能与许多因素有关
43 6
|
4月前
|
监控 API 数据处理
Flink web ui不仅仅是一个监控指标性能的网站
Flink web ui不仅仅是一个监控指标性能的网站
92 3
|
9月前
|
分布式计算 Hadoop Java
Hadoop生态系统中的流式数据处理技术:Apache Flink和Apache Spark的比较
Hadoop生态系统中的流式数据处理技术:Apache Flink和Apache Spark的比较
|
10月前
|
SQL 人工智能 分布式计算
使用 Flink 实时发现最热 Github 项目实验手册|Flink-Learning 实战营
加入 Flink-Learning 实战营,动手体验真实有趣的实战场景。只需 2 小时,让您变身 Flink 实战派。实战营采取了 Flink 专家在线授课,专属社群答疑,小松鼠助教全程陪伴的学习模式。
1578 1
使用 Flink 实时发现最热 Github 项目实验手册|Flink-Learning 实战营
|
10月前
|
SQL 存储 关系型数据库
5 分钟上手 Flink MySQL 连接器实验手册|Flink-Learning 实战营
加入 Flink-Learning 实战营,动手体验真实有趣的实战场景。只需 2 小时,让您变身 Flink 实战派。实战营采取了 Flink 专家在线授课,专属社群答疑,小松鼠助教全程陪伴的学习模式。
1652 2
5 分钟上手 Flink MySQL 连接器实验手册|Flink-Learning 实战营
|
11月前
|
Cloud Native 大数据 Java
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(1)
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(1)
115 0
|
11月前
|
缓存 监控 Cloud Native
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(2)
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(2)
|
11月前
|
分布式计算 Cloud Native 大数据
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(3)
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(3)
|
11月前
|
消息中间件 监控 Cloud Native
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(4)
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(4)
|
11月前
|
Cloud Native 大数据 Java
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(5)
带你读《企业级云原生白皮书项目实战》——5.3.3 任务性能(5)

相关产品

  • 实时计算 Flink版