提问者:小点点

Kafka流中的RocksDB在有可用空间时报告没有空间


我有一个Streams应用程序,它有一个由RocksDB支持的GlobalKtable失败了。我最初得到了https://issues.apache.org/jira/browse/KAFKA-6327中描述的错误,所以我将RocksDB升级到v5.14.2,现在给出了一个更明确的错误:org. rocksdb.RocksDBException:打开一个文件以追加:/kafka_streams/…剪切… /000295.sst:设备上没有剩余空间

RocksDB溢出到磁盘的目录(RHEL上的文件挂载)似乎有足够的空间(大小:5.4G使用:2.8G可用:2.6G使用%:52%)。我假设它实际上试图分配比剩余的2.6G更多的数据,但这似乎不太可能;主题中没有那么多数据。

我在https://docs.confluent.io/current/streams/developer-guide/config-streams.html#rocksdb-config-setter找到了将RocksDB配置为远离默认值的详细信息,但我没有看到任何可能解决该问题的明显信息。

我没有发现任何与此类问题相关的bug报告,我无法对后续步骤进行故障排除。

编辑添加:我刚刚在本地开发机器上针对出现上述问题的相同Kafka环境运行了流应用程序。当加载状态存储时,状态存储目录漂移到3.1G的高点,然后稳定在2.1G左右。它从未接近我们开发服务器上可用的5G。我还没有更接近找到答案。


共1个答案

匿名用户

我从来没有找到为什么部署环境中的磁盘使用是这样的答案,但我最终还是绝望地分配了更多的空间;当流正在处理时,它消耗了多达14GB的空间,然后才稳定在3-4GB左右。我假设磁盘空间错误是因为RocksDB试图分配空间,而不是它已经写入了它。

我添加了一个“经验法则”,我应该为流式应用程序分配4倍的磁盘空间。