我正在开发一个 apache-flink(v 1.17.2)流应用程序,其中我的文件接收器是 Google Cloud Storage。性能非常差,我的任务管理器 100% 忙。我相信这与它向 .inprogress 临时文件写入太多小文件的问题有关。启用检查点(75 秒)后,它仅将一个部分将多达 220 个文件写入 .inprogress 状态。使用 1 个任务管理器,它可以将高达 500 个事件/秒写入云存储,我还使用 avro 格式作为输出文件。
这是我对文件接收器的定义
val sink: FileSink[Click] = FileSink
.forBulkFormat(new Path(""), AvroWriters.forSpecificRecord(classOf[Click]))
.withBucketAssigner(new ObjectStorageBucketAssigner())
.withRollingPolicy(OnCheckpointRollingPolicy.build())
.build()
我尝试更改以下配置:
state.backend.fs.memory-threshold
、state.backend.fs.write-buffer-size
、taskmanager.network.numberOfBuffers
、taskmanager.network.memory.buffer-debloat.enabled
实际上对性能没有影响。 可以采取什么措施来改变这种行为并提高性能(吞吐量)?
state.backend.xxx
设置用于将状态保存到文件系统,与文件接收器没有任何关系。