apache-kafka - 使用 RocksDb 作为状态后端的 Flink 检查点的空 chk-* 目录太多
问题描述
我将 Rocksdb 设置为状态后端的位置存在太多空 chk-* 文件
我正在使用 FlinkKafkaConsumer 从 Kafka 主题中获取数据。我使用 RocksDb 作为状态后端。我只是打印从 Kafka 收到的消息。以下是我必须设置状态后端的属性:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(100);
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(50);
env.getCheckpointConfig().setCheckpointTimeout(60);
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
StateBackend rdb = new RocksDBStateBackend("file:///Users/user/Documents/telemetry/flinkbackends10", true);
env.setStateBackend(rdb);
env.execute("Flink kafka");
在 flink-conf.yaml 我也设置了这个属性:
state.checkpoints.num-retained: 3
我正在使用简单的 1 节点 flink 集群(使用 ./start-cluster.sh)。我开始了这项工作并让它运行了 1 小时,我看到在 /Users/user/Documents/telemetry/ 下创建了太多 chk-* 文件flinkbackends10 位置
chk-10 chk-12667 chk-18263 chk-20998 chk-25790 chk-26348 chk-26408 chk-3 chk-3333 chk-38650 chk-4588 chk-8 chk-96
chk-10397 chk-13 chk-18472 chk-21754 chk-25861 chk-26351 chk-26409 chk-30592 chk-34872 chk-39405 chk-5 chk-8127 chk-97
chk-10649 chk-13172 chk-18479 chk-22259 chk-26216 chk-26357 chk-26411 chk-31097 chk-35123 chk-39656 chk-5093 chk-8379 chk-98
chk-1087 chk-14183 chk-18548 chk-22512 chk-26307 chk-26360 chk-27055 chk-31601 chk-35627 chk-4 chk-5348 chk-8883 chk-9892
chk-10902 chk-15444 chk-18576 chk-22764 chk-26315 chk-26377 chk-28064 chk-31853 chk-36382 chk-40412 chk-5687 chk-9 chk-99
chk-11153 chk-15696 chk-18978 chk-23016 chk-26317 chk-26380 chk-28491 chk-32356 chk-36885 chk-41168 chk-6 chk-9135 shared
chk-11658 chk-16201 chk-19736 chk-23521 chk-26320 chk-26396 chk-28571 chk-32607 chk-37389 chk-41666 chk-6611 chk-9388 taskowned
chk-11910 chk-17210 chk-2 chk-24277 chk-26325 chk-26405 chk-29076 chk-32859 chk-37642 chk-41667 chk-7 chk-94
chk-12162 chk-17462 chk-20746 chk-25538 chk-26337 chk-26407 chk-29581 chk-33111 chk-38398 chk-41668 chk-7116 chk-95
其中只有 chk-41668、chk-41667、chk-41666 有数据。其余目录为空。
这是预期的行为。如何删除那些空目录?是否有一些用于删除空目录的配置?
解决方案
Answering my own question here:
In UI I was seeing 'checkpoint expired before completing' error in the checkpointing section. And found out that to resolve the error we need to increase the checkpoint timeout.
I increased the timeout from 60 to 500 and it started deleting the empty chk-* files.
env.getCheckpointConfig().setCheckpointTimeout(500);
推荐阅读
- email - 电子邮件模板在移动设备上不是全屏
- python - Pandas to_datetime 将年周转换为 2019 年的日期,第一周是 wk0
- typo3-7.6.x - 如何加载没有相关对象的模型?
- sqlalchemy - SQLAlchemy 没有将会话标记为更改属性的脏会话
- parallel-processing - Ansible 是并行管理所有主机还是仅管理五个主机?(-f 和 :serial)
- powershell - 试图让 Powershell 使用 API
- mysql - 在 nodejs 中运行查询时出现 MYSQL 语法错误。在 mysql 工作台上工作正常
- sql-server - 如何使用存储过程访问插入和删除的逻辑表
- java - 如何找出使 poi 损坏 xlsx / xlsm 文件的原因
- java - 资源编译器错误:尝试运行 JUnit 测试时拒绝访问