sofa教程 sofa格式
存储空间不足问题可通过四步解决:一、配置RocksDB TTL与压缩策略;二、手动清理过期日志文件;三、限制SOFA MQ客户端存储上限;四、启用日志分片与对象存储归档。

如果您在使用SOFAStack或SOFAJRaft相关组件时发现存储空间不足,日志中间隙出现磁盘丢失、RocksDB报错或OutOfMemory、Disk空间耗尽等提示,则很可能是底层 LogStorage(默认基于 RocksDB)的持久化目录持续开启未清理开始。以下是解决此问题的步骤:一、调整 RocksDB 日志压缩与 TTL 策略
RocksDB 默认不会自动删除过期日志,需要显式配置压缩触发条件与数据生存周期,以磁盘占用速度增长。该方法直接作用于 SOFAJRaft 的 LogStorage层,适用于长期运行且日志支撑严重的节点。
1、定位 SOFAJRaft 配置文件(如 raft-config.properties 或代码中 LogManager 初始化处);
2、添加或修改 RocksDB 选项参数:options.setTtl(86400)(单位秒,示例设为 1天);
3、启用后台压缩:options.setEnableBackgroundCompaction(true);
4、设置最大日志保留数量:logStorage.setMaxLogIndexRetention(100000)(根据业务吞吐量调整,避免无限追加);
5、重启SOFAJRaft节点使配置生效。二、手动清理周期Raft日志文件
当磁盘已满且服务不可用时,可临时进入 RocksDB 存储路径,安全删除提交并复制完成的已旧日志文件。SOFAJRaft 的日志按 log_0000000001、log_0000000002 等创建,只允许删除索引远小于当前提交的索引 的文件。
1、通过 JMX 或 SOFAJRaft Admin API 查询当前lastCommissedIndex值;
2、进入 RocksDB 数据目录(默认路径如 /data/sofa-jraft/log);
3、列出所有 log_* 文件,按数字后缀升序排列;
4、删除后缀编号≤lastCommissedIndex - 50000 的日志文件(创建安全开发);
5、执行ls -la确认磁盘空间释放,再观察服务是否恢复写入能力。
