Flink RocksDB性能问题

3
我有一个flink作业(使用scala),基本上是从kafka-topic(1.0)中读取数据,聚合数据(使用1分钟事件时间滚动窗口和fold函数,我知道这个函数已经过时,但比聚合函数更容易实现),并将结果写入2个不同的kafka主题。
问题是-当我使用FS状态后端时,一切都运行顺利,检查点只需要1-2秒,平均状态大小为200MB-也就是说,直到状态大小增加(例如在关闭间隙时)。
我想我会尝试使用rocksdb(在hdfs上)进行检查点-但吞吐量显着低于fs状态后端。据我所知,当使用fs状态后端时,flink不需要对每个状态访问进行序列化/反序列化,因为状态保留在内存(堆)中,而rocks db需要,我猜这就是导致减速(和背压以及检查点花费更长时间,有时超时10分钟)的原因。
尽管如此,有时状态无法放入内存,我正在努力弄清楚如何使rocksdb状态后端表现“更好”。
这是因为fold函数已经过时吗?我需要微调一些文档中不容易搜索到的参数吗?任何提示?

1
当你说“rocksdb(在hdfs上)”时,你是指hdfs被用作工作状态还是检查点?你尝试过增量检查点吗?你能给RocksDB缓存分配更多内存吗? - David Anderson
我以前不知道有区别,基本上我正在使用namenode:port///checkpoints URI实例化rocksdb状态后端。如果检查点和工作状态之间有区别,我该如何定义它? 我正在使用增量检查点技术,我可以尝试提供更多内存,请问如何操作? - OmriManor
1个回答

1
每个状态后端都在某处保存工作状态,然后将其检查点持久化到分布式文件系统中。RocksDB状态后端将其工作状态保存在磁盘上,这可以是本地磁盘,希望比hdfs更快。
尝试将state.backend.rocksdb.localdir(请参见https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/state/state_backends.html#rocksdb-state-backend-config-options)设置为每个任务管理器上最快的本地文件系统上的某个位置。
打开增量检查点也可能会产生很大的差异。
另请参见Tuning RocksDB

明天我会尝试将state.backend.rocksdb.localdir设置为本地目录并分享结果,而且我已经在使用增量检查点。 - OmriManor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接