Kafka Streams使用问题:Lib RocksDB出现UnsatisfiedLinkError错误
解决Kafka Streams RocksDB JNI加载失败的
UnsatisfiedLinkError 这个错误是RocksDB的JNI本地库加载失败导致的,在Windows环境下运行Kafka Streams 1.1.0版本很容易碰到这类问题,我给你几个实用的解决办法:
手动修复RocksDB本地库
Kafka 1.1.0依赖的RocksDB版本在Windows上可能存在兼容性问题。你可以尝试:- 下载适配Windows平台的
librocksdbjni.dll文件(推荐和Kafka版本匹配的5.x系列,比如5.14.2); - 将dll文件放到JVM的
java.library.path默认目录(比如JRE的bin文件夹),或者启动程序时通过JVM参数指定路径:-Djava.library.path=C:\path\to\your\dll\directory
也可以在SBT依赖里明确指定兼容的RocksDB JNI版本,覆盖Kafka默认的依赖:
libraryDependencies += "org.rocksdb" % "rocksdbjni" % "5.14.2"- 下载适配Windows平台的
临时切换为内存状态存储(仅测试用)
如果只是开发测试单词计数功能,不想折腾本地库,可以把状态存储改成内存模式,这样就绕开了RocksDB的依赖。在构建拓扑时给count操作指定内存存储:val wordCounts = textLines .flatMapValues(text => text.toLowerCase.split("\\W+")) .groupBy((_, word) => word) .count(Materialized.as("word-counts").withStoreType(KeyValueStore.MemoryKeyValueStore))注意:内存存储重启后状态会丢失,绝对不能用于生产环境。
安装VC++运行时库
RocksDB的JNI库依赖微软的Visual C运行时组件,如果你的系统缺少这个,就会加载失败。去微软官网下载安装**Visual C Redistributable for Visual Studio 2015/2017/2019**(选对应系统位数的版本),安装完成后重启电脑再运行程序。清理损坏的临时文件
错误里提到的dll是JVM从依赖包中提取到临时目录的,可能文件已经损坏。手动删除C:\Users\user\AppData\Local\Temp\下所有以librocksdbjni开头的文件,然后重新运行程序,让JVM重新提取正确的库文件。
内容的提问来源于stack exchange,提问作者mukesh210
相关产品推荐
相关产品推荐

