当运行我的有状态Kafka流应用程序时,我遇到了各种不同的RocksDB磁盘I/O Stalefile异常。只有当我至少有一个KTable实现时才会出现异常,并且它会在不同的时间发生。我试了无数次都没能成功。
App/环境细节:
- 运行时:Java
- Kafka库:org.apache.kafka: Kafka -streams:2.5.1
- 部署:OpenShift
- 卷类型:NFS
- RAM:2000 - 8000 MiB
- CPU:200 Millicores to 2 Cores 1
- 线程:
- 分区:1 - many
遇到异常:
-
由于:
org.apache.kafka.streams.errors.ProcessorStateException: Error while getting value for key from at org.apache.kafka.streams.state.internals.RocksDBStore.get(RocksDbStore.java:301)
-
Caused by: org.apache.kafka.streams.errors.ProcessorStateException: Error restoring batch to store at org.apache.kafka.streams.state.internals.RocksDBStore$RocksDBBatchingRestoreCallback.restoreAll(RocksDbStore.java:636)
-
Caused by: org.apache.kafka.streams.errors.ProcessorStateException: Error while range compacting during restoring at org.apache.kafka.streams.state.internals.RocksDBStore$SingleColumnFamilyAccessor.toggleDbForBulkLoading(RocksDbStore.java:616)
-
Caused by: org.apache.kafka.streams.errors.ProcessorStateException: Error while executing flush from store at org.apache.kafka.streams.state.internals.RocksDBStore.flush(RocksDbStore.java:616)
很抱歉不能发布整个堆栈跟踪,但是上面所有的异常似乎都引用了org.rocksdb.RocksDBException: IOError(Stalefile)
异常。
附加信息:
- 使用持久状态目录
- Kafka主题设置使用默认值创建
- 在单个线程上运行单个实例
- 在读取和写入过程中引发异常
- 使用有效数据时引发异常
- 内部重分区主题也发生异常
我非常感谢你的帮助,如果我能提供任何进一步的信息,请告诉我。
如果您使用的是Posix文件系统,则此错误意味着文件系统返回ESTALE。参见https://man7.org/linux/man-pages/man3/errno.3.html
中对代码的描述。