Apache flink 使用RocksDB状态后端检查Flink 1.10.1中的问题
我们的Flink工作遇到了一个很难观察到的问题 这项工作相当简单,它:Apache flink 使用RocksDB状态后端检查Flink 1.10.1中的问题,apache-flink,rocksdb,flink-cep,Apache Flink,Rocksdb,Flink Cep,我们的Flink工作遇到了一个很难观察到的问题 这项工作相当简单,它: 使用Flink Kinesis连接器从Kinesis读取消息 键入消息并将其分发给约30个不同的CEP操作员,以及两个自定义的WindowFunction 从CEP/Windows发出的消息被转发到将消息写入SQS的SinkFunction 我们正在运行Flink 1.10.1 Fargate,使用2个4vCPU/8GB的容器,我们正在使用RocksDB状态后端,配置如下: state.backend: rocksdb st
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
state.backend.rocksdb.checkpoint.transfer.thread.num: {threadNumberAccordingYourProjectSize}
作业以8的并行度运行
当作业从冷启动时,它使用很少的CPU,检查点在2秒内完成。随着时间的推移,检查点的大小会增加,但时间仍然是非常合理的几秒钟:
在此期间,我们可以观察到TaskManager的CPU使用率由于某些原因而缓慢增长:
最终,检查点时间将开始增加到几分钟,然后将开始反复超时(10分钟)。此时:
- 检查点大小(完成时)约为60MB
- CPU使用率很高,但不是100%(通常在60-80%左右)
- 查看正在进行的检查点,通常95%以上的操作员会在30秒内完成检查点,但少数人会坚持,永远不会完成。SQS接收器将始终包含在其中,但
不丰富且没有状态SinkFunction
- 在这些操作员上使用背压监测器报告背压高
- 正在用户函数中执行阻塞i/o
- 大量计时器同时启动
- 不同源之间的事件时间偏差导致大量状态被缓冲
- 数据倾斜(热键)压倒了一个子任务或插槽
- 冗长的GC暂停
- 争夺关键资源(例如,使用NAS作为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
state.backend.rocksdb.checkpoint.transfer.thread.num: {threadNumberAccordingYourProjectSize}
如果不添加此项,则它将为1(默认值)
链接:您是否使用状态TTL,如果是,它是如何配置的?