問題現象
項目中引入可Kafka Stream ,Windows下啟動不報錯 ,但是在 macOS M系列 環境下就會報錯,初步定位是使用 Java 項目調用 RocksDB 時,運行過程中出現以下報錯:
UnsatisfiedLinkError: no rocksdbjni in java.library.path
- 或者
librocksdbjni.dylib
無法被正確加載。
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.jnilibat 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 依賴:<dependency><groupId>org.rocksdb</groupId><artifactId>rocksdbjni</artifactId><version>8.3.2</version> <!-- 請使用最新穩定版本 --> </dependency>
添加依賴之后 RocksDB 會以內嵌庫的形式打包進應用,無需單獨安裝系統級 RocksDB。
總結
- 必須引入
rocksdbjni
依賴,否則缺少 JNI 支持。
這樣 macOS M系列 上即可成功運行 RocksDB。