
[英]Too many empty chk-* directories with Flink checkpointing using RocksDb as state backend
[英]Checkpointing issues in Flink 1.10.1 using RocksDB state backend
我们的 Flink 工作遇到了一个非常难以观察的问题。
Job 相当简单,它:
我们运行 Flink 1.10.1 Fargate,使用 2 个 4vCPU/8GB 的容器,我们使用 RocksDB 状态后端,配置如下:
state.backend: rocksdb
state.backend.async: true
state.backend.incremental: false
state.backend.rocksdb.localdir: /opt/flink/rocksdb
state.backend.rocksdb.ttl.compaction.filter.enabled: true
state.backend.rocksdb.files.open: 130048
该作业以 8 的并行度运行。
当作业从冷启动时,它使用很少的 CPU 并且检查点在 2 秒内完成。 随着时间的推移,检查点大小会增加,但时间仍然是非常合理的几秒钟:
在此期间,我们可以观察到 TaskManager 的 CPU 使用率由于某种原因而缓慢增长:
最终,检查点时间将开始飙升至几分钟,然后将开始重复超时(10 分钟)。 此时:
SinkFunction
并不丰富且没有状态。最终,这种情况可以通过以下两种方式之一解决:
我们真的不知道如何调试它。 与您在此处的某些问题中看到的那种状态相比,我们的状态似乎很小。 我们的数量也很低,我们经常低于 100 条记录/秒。
我们非常感谢您对我们可以研究的领域的任何输入以进行调试。
谢谢,
几点:
状态随着时间的推移逐渐增长并不罕见。 也许您的密钥空间正在增长,并且您正在为每个密钥保留一些状态。 如果您依赖状态 TTL 来使陈旧状态过期,那么它的配置方式可能无法像您预期的那样快速清除过期状态。 无意中创建 CEP 模式也相对容易,这些模式需要在排除某些可能的匹配之前长时间保持某种状态。
下一步是确定背压的原因。 最常见的原因是作业没有足够的资源。 随着时间的推移,随着管理的用户数量(例如)的增加,大多数作业逐渐需要更多资源。 例如,您可能需要增加并行度,或为实例提供更多内存,或增加接收器的容量(或连接到接收器的网络速度),或为 RocksDB 提供更快的磁盘。
除了供应不足外,其他导致背压的原因包括
启用RocksDB 本机指标可能会提供一些见解。
将此属性添加到您的配置中:
state.backend.rocksdb.checkpoint.transfer.thread.num: {threadNumberAccordingYourProjectSize}
如果你不添加这个,它将是 1(默认)
链接: https : //github.com/apache/flink/blob/master/flink-state-backends/flink-statebackend-rocksdb/src/main/java/org/apache/flink/contrib/streaming/state/RocksDBOptions。爪哇#L62
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.