flink rocksdb性能问题

rggaifut  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(749)

我有一个flink作业(scala),它基本上是从kafka主题(1.0)读取数据,聚合数据(1分钟事件时间滚动窗口,使用fold函数,我知道它已被弃用,但比聚合函数更容易实现),并将结果写入两个不同的kafka主题。
问题是-当我使用fs state后端时,一切都运行顺利,检查点需要1-2秒,平均状态大小为200MB-也就是说,直到状态大小增加(例如,在关闭间隙时)。
我想我会尝试使用rocksdb(overhdfs)作为检查点,但是吞吐量明显低于fs state backend。据我所知,在使用fs state backend时,flink不需要对每个状态访问进行ser/反序列化,因为状态保存在内存(heap)中,rocks db会这样做,我猜这就是导致速度减慢的原因(背压和检查点要花更长的时间,有时在10分钟后超时)。
尽管如此,有时状态无法放入内存,我正在尝试找出基本上如何使rocksdb state后端执行得“更好”。
是因为不推荐的fold函数吗?我是否需要微调文档中不易搜索的某些参数?有什么建议吗?

hec6srdp

hec6srdp1#

每个状态后端将工作状态保存在某个位置,然后在分布式文件系统中持久地保持其检查点。rocksdb状态后端将其工作状态保存在磁盘上,这可以是本地磁盘,希望比hdfs更快。
尝试设置state.backend.rocksdb.localdir(请参阅https://ci.apache.org/projects/flink/flink-docs-release-1.6/ops/state/state_backends.html#rocksdb-状态后端配置选项)到每个taskmanager上最快的本地文件系统的某个位置。
启用增量检查点也会产生很大的影响。
另请参见tuning rocksdb。

相关问题