GeminiStateBackend是一款面向流计算场景的KV存储引擎,作为实时计算Flink版产品的默认状态存储后端(StateBackend)。本文为您介绍企业级状态后端存储GeminiStateBackend的核心设计,以及其与RocksDBStateBackend的性能对比情况。
整体介绍
有状态计算是流处理中非常复杂和有挑战的场景。流处理的数据访问具有以下特点:
存在大量的随机访问且很少有范围查询。
数据流量和热点会更加频繁地动态变化,使得即便是同一算子的不同并发,也会有不同的数据访问模式。
GeminiStateBackend就是针对以上特点设计的,其核心设计亮点如下:
全新的架构和数据结构设计,全面的性能提升。
GeminiStateBackend的整体架构是在LSM数据结构的基础上设计的,包含了随数据规模和访问特点变化而自适应、数据冷热分层,可以在Anti-caching和Caching架构间灵活切换的三种能力。此外,还具备随机查询友好的哈希存储结构。Nexmark性能对比的结果显示,GeminiStateBackend相比RocksDBStateBackend的性能有了较大的提升,其中约一半用例的性能领先RocksDB 70%以上。
支持存储计算分离,彻底摆脱状态数据的本地盘存储限制。
在本地盘空间限制的环境下,State较大的作业经常会遇到本地磁盘空间不足的问题。基于RocksDBStateBackend的作业通常需要通过扩并发等增加资源的手段来解决该问题。GeminiStateBackend具有存储计算分离的技术,使得状态存储可以不依赖于本地盘,可以避免因本地状态数据过大而引发作业故障的问题。有关存储计算分离相关配置,请参见存算分离配置。
支持自适应KV分离,大幅提升双流或多流Join作业的性能。
双流或多流Join作为流计算中最有挑战的场景之一,也是状态存储会遇到瓶颈的一个典型场景。基于大量场景Join成功率较低、或者状态数据值较长的特点,GeminiStateBackend推出KV分离技术,可以极大提升双流或多流Join作业的性能,且该功能可以完全自适应调整,不需要您额外配置调优。经过阿里巴巴集团双十一核心业务验证,开启KV分离后,作业吞吐能力可以提升50% ~ 70%以上,计算资源利用率平均可以提升50%,典型优势场景下可以提升100% ~ 200%。有关KV分离相关配置,请参见KV分离配置。
轻量级作业快照,显著加速大状态作业检查点和快照完成。
GeminiStateBackend通过支持更细粒度的作业快照,同时解耦检查点与LSM的Compaction机制,让检查点和快照变得更加稳定快速。此外,GeminiStateBackend通过支持Native Incremental Savepoint,结合实时计算产品提供的原生快照,让其性能趋近检查点,极大提高了快照的可用性。
自适应参数调优,告别手动调参烦恼。
在流计算任务中,不同算子往往具有不同的状态访问模式。状态存储通常需要不同的参数组合才可以达到最佳的性能,而这些参数往往很多而且涉及底层细节,手动调参会给您带来较高的学习和理解成本。GeminiStateBackend通过自适应参数调优技术,在作业运行时根据当前数据访问模式和流量自动调参,以达到各种场景下的最佳性能。经过阿里巴巴集团双十一核心业务验证,该技术可以避免95%以上的人工调参,同时提升10% ~ 40%的单核吞吐能力。有关自适应调参相关配置,请参见自适应调参配置。
Nexmark性能对比
我们使用Nexmark中State瓶颈的用例和相同的硬件资源,测试并对比了RocksDBStateBackend和GeminiStateBackend的性能。
Nexmark属于第三方搭建的网站,访问时可能会存在无法打开或访问延迟的问题。
结果显示GeminiStateBackend对作业整体效能(单核吞吐能力)的优化效果十分显著,具体数据如下表所示。
CaseName | Gemini TPS/Core | RocksDB TPS/Core | Gemini VS RocksDB提升 |
q4 | 83.63 K/s | 53.26 K/s | 57.02% |
q5 | 84.52 K/s | 57.86 K/s | 46.08% |
q8 | 468.96 K/s | 361.37 K/s | 29.77% |
q9 | 59.42 K/s | 26.56 K/s | 123.72% |
q11 | 93.08 K/s | 48.82 K/s | 90.66% |
q18 | 150.93 K/s | 87.37 K/s | 72.75% |
q19 | 143.46 K/s | 58.5 K/s | 145.23% |
q20 | 75.69 K/s | 22.44 K/s | 237.30% |
相关文档
如何创建、查看、删除状态集和从指定状态恢复,请参见作业状态集管理。
RocksDB和Gemini在状态数据迁移时的迁移效率和作业表现方面的区别,请参见概述。
SQL修改所造成的兼容性影响详情,请参见SQL修改及兼容性。
使用Nexmark测试实时计算Flink版性能过程,请参见性能白皮书(Nexmark性能测试)。
实时计算Flink版系统检查点或作业快照相关的常见问题,请参见系统检查点或作业快照。