问题现象
项目中引入可Kafka Stream ,Windows下启动不报错 ,但是在 macOS M系列 环境下就会报错,初步定位是使用 Java 项目调用 RocksDB 时,运行过程中出现以下报错:
UnsatisfiedLinkError: no rocksdbjni in java.library.path
- 或者
librocksdbjni.dylib
无法被正确加载。
java
Exception in thread "kafka-streams-app001-f566769f-d99b-45fa-9a5a-5ebf722fd601-StreamThread-1" java.lang.UnsatisfiedLinkError: Can't load library: /var/folders/qj/l1h4j0mj0bs56qd20d4sr3_40000gn/T/librocksdbjni13358465134412954828.jnilib
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2622)
at java.base/java.lang.Runtime.load0(Runtime.java:765)
at java.base/java.lang.System.load(System.java:1852)
at org.rocksdb.NativeLibraryLoader.loadLibraryFromJar(NativeLibraryLoader.java:78)
at org.rocksdb.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:56)
at org.rocksdb.RocksDB.loadLibrary(RocksDB.java:64)
at org.rocksdb.RocksDB.<clinit>(RocksDB.java:35)
at org.rocksdb.DBOptions.<clinit>(DBOptions.java:21)
at
原因分析
-
缺少 JNI 动态库依赖 :RocksDB Java 依赖
rocksdbjni
,需要正确的本地动态库(.dylib
)文件。 -
依赖未引入 :Java 层需要
rocksdbjni
的 Maven 依赖
解决方案
-
添加 Java 依赖
在项目的
pom.xml
中引入 RocksDB Java 依赖:xml<dependency> <groupId>org.rocksdb</groupId> <artifactId>rocksdbjni</artifactId> <version>8.3.2</version> <!-- 请使用最新稳定版本 --> </dependency>
添加依赖之后 RocksDB 会以内嵌库的形式打包进应用,无需单独安装系统级 RocksDB。
总结
- 必须引入
rocksdbjni
依赖,否则缺少 JNI 支持。
这样 macOS M系列 上即可成功运行 RocksDB。