Topling Flink: ToplingDB 作为状态后端

Topling Flink 使用 ToplingDB 作为状态后端,完全兼容将 rocksdb 状态后端的同时,性能提升 4 倍。

在大数据流处理领域,Apache Flink 凭借其出色的状态管理和容错机制成为了业界标杆。而 RocksDB 作为 Flink 最常用的状态后端存储引擎,其性能直接影响着整个流处理作业的吞吐量和延迟。近期,我们将 ToplingDB 成功集成到 Flink release-2.0 ,作为原版 RocksDB 的直接替代方案,取得了令人瞩目的性能提升。

其中横坐标数字表示测试项编号(测试项名字太长,编号名字对应关系见后面的详表)

从测试结果可以看出,ToplingDB 在所有基准测试项目中均展现出显著优势。具体表现在:

ToplingDB 作为 Flink 状态后端的巨大潜力。其卓越的性能表现、简单的集成方式和灵活的配置管理,使其成为高性能 Flink 应用的理想选择。 对于正在使用或考虑使用 Flink 的企业和开发者,我们强烈推荐尝试 ToplingDB 作为状态后端存储引擎。它不仅能够提供即时的性能提升,还能降低系统复杂性和运维成本。

开源开放

Topling Flink 是基于 ToplingDB 的 Flink,分叉自 apache flink,ToplingDB 则分叉自 RocksDB,兼容 RocksDB 接口。保持兼容的前提下,性能大幅提升。

我们已经发布了 Flink 状态后端: ToplingDB vs RocksDB,并且开源。

测试结果原始表格(编号名称对照)

编号 测试项名称 ToplingDB RocksDB
1 ListStateBenchmark.listAdd 1079.393 421.951
2 ListStateBenchmark.listAddAll 505.823 282.129
3 ListStateBenchmark.listAppend 1203.678 396.385
4 ListStateBenchmark.listGet 1921.897 449.138
5 ListStateBenchmark.listGetAndIterate 1924.075 458.202
6 ListStateBenchmark.listUpdate 1235.666 407.245
7 MapStateBenchmark.mapAdd 1102.394 382.158
8 MapStateBenchmark.mapContains 1730.494 487.324
9 MapStateBenchmark.mapEntries 3085.54 1313.344
10 MapStateBenchmark.mapGet 1523.645 398.023
11 MapStateBenchmark.mapIsEmpty 843.915 266.39
12 MapStateBenchmark.mapIterator 3327.355 1280.043
13 MapStateBenchmark.mapKeys 3810.861 1293.438
14 MapStateBenchmark.mapPutAll 296.987 126.714
15 MapStateBenchmark.mapRemove 1272.567 363.7
16 MapStateBenchmark.mapUpdate 1129.528 376.142
17 MapStateBenchmark.mapValues 3492.021 1319.331
18 ValueStateBenchmark.valueAdd 1213.985 388.418
19 ValueStateBenchmark.valueGet 2290.746 775.011
20 ValueStateBenchmark.valueUpdate 1192.72 385.393
21 ttl.TtlListStateBenchmark.listAdd - OnCreateAndWrite 1083.25 394.83
22 ttl.TtlListStateBenchmark.listAdd - OnReadAndWrite 1071.17 395.58
23 ttl.TtlListStateBenchmark.listAddAll - OnCreateAndWrite 257.383 79.02
24 ttl.TtlListStateBenchmark.listAddAll - OnReadAndWrite 253.553 79.02
25 ttl.TtlListStateBenchmark.listAppend - OnCreateAndWrite 1069.01 386.36
26 ttl.TtlListStateBenchmark.listAppend - OnReadAndWrite 1072.84 383.72
27 ttl.TtlListStateBenchmark.listGet - OnCreateAndWrite 1779.89 493.85
28 ttl.TtlListStateBenchmark.listGet - OnReadAndWrite 710.25 213.1
29 ttl.TtlListStateBenchmark.listGetAndIterate - OnCreateAndWrite 1671.69 481.71
30 ttl.TtlListStateBenchmark.listGetAndIterate - OnReadAndWrite 710.39 213.94
31 ttl.TtlListStateBenchmark.listUpdate - OnCreateAndWrite 1082.45 395.91
32 ttl.TtlListStateBenchmark.listUpdate - OnReadAndWrite 1081.67 396.05
33 ttl.TtlMapStateBenchmark.mapAdd - OnCreateAndWrite 1016.88 381.27
34 ttl.TtlMapStateBenchmark.mapAdd - OnReadAndWrite 1000.12 375.6
35 ttl.TtlMapStateBenchmark.mapGet - OnCreateAndWrite 1226.75 343.37
36 ttl.TtlMapStateBenchmark.mapGet - OnReadAndWrite 688.46 205.08
37 ttl.TtlMapStateBenchmark.mapIsEmpty - OnCreateAndWrite 561.11 215.98
38 ttl.TtlMapStateBenchmark.mapIsEmpty - OnReadAndWrite 563.68 220.08
39 ttl.TtlMapStateBenchmark.mapIterator - OnCreateAndWrite 2401.46 1063.89
40 ttl.TtlMapStateBenchmark.mapIterator - OnReadAndWrite 610.19 292.63
41 ttl.TtlMapStateBenchmark.mapPutAll - OnCreateAndWrite 264.431 113.49
42 ttl.TtlMapStateBenchmark.mapPutAll - OnReadAndWrite 259.079 114.55
43 ttl.TtlMapStateBenchmark.mapUpdate - OnCreateAndWrite 1026.27 372.86
44 ttl.TtlMapStateBenchmark.mapUpdate - OnReadAndWrite 1026 375.41
45 ttl.TtlValueStateBenchmark.valueAdd - OnCreateAndWrite 1110.14 382.84
46 ttl.TtlValueStateBenchmark.valueAdd - OnReadAndWrite 1110.93 380.08
47 ttl.TtlValueStateBenchmark.valueGet - OnCreateAndWrite 2001.33 730.91
48 ttl.TtlValueStateBenchmark.valueGet - OnReadAndWrite 683.83 209.58
49 ttl.TtlValueStateBenchmark.valueUpdate - OnCreateAndWrite 1050.12 383.82
50 ttl.TtlValueStateBenchmark.valueUpdate - OnReadAndWrite 1054.43 383.33