本文为您整体介绍企业级状态后端存储GeminiStateBackend,以及其与RocksDBStateBackend的性能对比情况。

整体介绍

有状态计算是流处理中非常复杂和有挑战的场景。流处理的数据访问具有以下特点:
  • 存在大量的随机访问且很少有范围查询。
  • 数据流量和热点会更加频繁地动态变化,使得即便是同一算子的不同并发,也会有不同的数据访问模式。
GeminiStateBackend是针对这些特点研发的一款面向流计算场景的KV存储引擎,并作为实时计算Flink版产品的默认状态存储后端(StateBackend),大规模应用在阿里巴巴集团和阿里云客户生产实践当中。GeminiStateBackend的核心设计亮点如下:
  • 全新的架构和数据结构设计,全面的性能提升。

    GeminiStateBackend的整体架构是在LSM数据结构的基础上设计的,包含了随数据规模和访问特点变化而自适应、数据冷热分层,可以在Anti-caching和Caching架构间灵活切换的三种能力。此外,还具备随机查询友好的哈希存储结构。Nexmark性能对比的结果显示,GeminiStateBackend相比RocksDBStateBackend的性能有了较大的提升。

  • 支持存储计算分离,彻底摆脱状态数据的本地盘存储限制。

    在本地盘空间限制的环境下,State较大的作业经常会遇到本地磁盘空间不足的问题。基于RocksDBStateBackend的作业通常需要通过扩并发等增加资源的手段来解决该问题。GeminiStateBackend具有存储计算分离的技术,使得状态存储可以不依赖于本地盘,可以避免因本地状态数据过大而引发作业故障的问题。有关存储计算分离相关配置,请参见存算分离配置

  • 支持KV分离,大幅提升双流或多流Join作业的效能。

    双流或多流Join作为流计算中最有挑战的场景之一,也是状态存储会遇到瓶颈的一个典型场景。GeminiStateBackend基于KV分离技术,极大提升了双流或多流Join作业的效能。经过阿里巴巴集团双十一核心业务验证,开启KV分离后计算资源利用率平均可以提升50%。典型优势场景下可以提升100% ~ 200%。有关KV分离相关配置,请参见KV分离配置

  • 自适应参数调优,告别手动调参烦恼。

    在流计算任务中,不同算子往往具有不同的状态访问模式。状态存储通常需要不同的参数组合才可以达到最佳的性能,而这些参数往往很多而且涉及底层细节,手动调参会给您带来较高的学习和理解成本。GeminiStateBackend通过自适应参数调优技术,在作业运行时根据当前数据访问模式和流量自动调参,以达到各种场景下的最佳性能。经过阿里巴巴集团双十一核心业务验证,该技术可以避免95%以上的人工调参,同时提升10% ~ 40%的单核吞吐能力。有关自适应调参相关配置,请参见自适应调参配置

Nexmark性能对比

我们使用Nexmark中State瓶颈的用例和相同的硬件资源,测试并对比了RocksDBStateBackend和GeminiStateBackend的性能。结果显示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%