我有一个Streams应用程序,该应用程序有一个由RocksDB支持的GlobalKtable
出现故障。我最初遇到的是https://issues.apache.org/jira/browse/KAFKA-6327中描述的错误,所以我将RocksDB升级到v5.14.2,现在给出了一个更明确的错误:org.rocksdb.RocksDBException: While open a file for appending: /kafka_streams/...snip.../000295.sst: No space left on device
RocksDB溢出到磁盘的目录(RHEL上的文件装载)似乎具有足够的空间(Size: 5.4G Used: 2.8G Available: 2.6G Use%: 52%
)。我假设它实际上正在尝试分配比剩余的2.6G更多的内存,但这似乎不太可能。主题中没有太多数据。
我发现了将RocksDB配置为不使用默认值https://docs.confluent.io/current/streams/developer-guide/config-streams.html#rocksdb-config-setter的详细信息,但是我看不出有任何可能解决此问题的明显方法。
我还没有发现与此类问题相关的任何错误报告,而我对下一步的故障排除感到茫然。
编辑后添加: 我只是在具有上述问题的同一Kafka环境下,在本地开发计算机上运行了流应用程序。在加载状态存储时,状态存储目录上升到最高3.1G,然后稳定在2.1G左右。它从未接近我们开发服务器上可用的5G。我离寻找答案还很近。
答案 0 :(得分:0)
我从来没有找到为什么部署环境中的磁盘使用情况会如此的答案,但最终我在绝望中分配了更多的空间。在处理流时,它消耗了多达14GB的空间,然后才减少到3-4GB。我认为磁盘空间错误是因为RocksDB试图分配空间,而不是它已经写入了空间。
我添加了一个“经验法则”,我应该为流式应用分配4倍的磁盘空间。