当前位置: 首页 > 面试题库 >

使用Kafka Streams开发时,Lib上的UnsatisfiedLinkError会晃动DB dll

寇开畅
2023-03-14
问题内容

我正在开发Windows机器上编写Kafka Streams应用程序。如果我尝试使用Kafka Streams
leftJoinbranch功能,则在执行jar应用程序时出现以下错误:

Exception in thread "StreamThread-1" java.lang.UnsatisfiedLinkError: C:\Users\user\AppData\Local\Temp\librocksdbjni325337723194862275.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1086)
    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.Options.<clinit>(Options.java:22)
    at org.apache.kafka.streams.state.internals.RocksDBStore.openDB(RocksDBStore.java:115)
    at org.apache.kafka.streams.state.internals.Segment.openDB(Segment.java:38)
    at org.apache.kafka.streams.state.internals.Segments.getOrCreateSegment(Segments.java:75)
    at org.apache.kafka.streams.state.internals.RocksDBSegmentedBytesStore.put(RocksDBSegmentedBytesStore.java:72)
    at org.apache.kafka.streams.state.internals.ChangeLoggingSegmentedBytesStore.put(ChangeLoggingSegmentedBytesStore.java:54)
    at org.apache.kafka.streams.state.internals.MeteredSegmentedBytesStore.put(MeteredSegmentedBytesStore.java:101)
    at org.apache.kafka.streams.state.internals.RocksDBWindowStore.put(RocksDBWindowStore.java:109)
    at org.apache.kafka.streams.state.internals.RocksDBWindowStore.put(RocksDBWindowStore.java:101)
    at org.apache.kafka.streams.kstream.internals.KStreamJoinWindow$KStreamJoinWindowProcessor.process(KStreamJoinWindow.java:65)
    at org.apache.kafka.streams.processor.internals.ProcessorNode$1.run(ProcessorNode.java:48)
    at org.apache.kafka.streams.processor.internals.StreamsMetricsImpl.measureLatencyNs(StreamsMetricsImpl.java:188)
    at org.apache.kafka.streams.processor.internals.ProcessorNode.process(ProcessorNode.java:134)
    at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:83)
    at org.apache.kafka.streams.kstream.internals.KStreamFlatMapValues$KStreamFlatMapValuesProcessor.process(KStreamFlatMapValues.java:43)
    at org.apache.kafka.streams.processor.internals.ProcessorNode$1.run(ProcessorNode.java:48)
    at org.apache.kafka.streams.processor.internals.StreamsMetricsImpl.measureLatencyNs(StreamsMetricsImpl.java:188)
    at org.apache.kafka.streams.processor.internals.ProcessorNode.process(ProcessorNode.java:134)
    at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:83)
    at org.apache.kafka.streams.kstream.internals.KStreamFilter$KStreamFilterProcessor.process(KStreamFilter.java:44)
    at org.apache.kafka.streams.processor.internals.ProcessorNode$1.run(ProcessorNode.java:48)
    at org.apache.kafka.streams.processor.internals.StreamsMetricsImpl.measureLatencyNs(StreamsMetricsImpl.java:188)
    at org.apache.kafka.streams.processor.internals.ProcessorNode.process(ProcessorNode.java:134)
    at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:83)
    at org.apache.kafka.streams.processor.internals.SourceNode.process(SourceNode.java:70)
    at org.apache.kafka.streams.processor.internals.StreamTask.process(StreamTask.java:197)
    at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:641)
    at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:368)

似乎Kafka找不到DLL,但是请稍候…我正在开发Java应用程序!

可能是什么问题呢?而且,如果我尝试像a这样的更简单的流操作,为什么不会显示此错误filter

更新:

仅当代理中存在消息时,才会出现此问题。我正在使用Kafka Streams版本0.10.2.1。

这是引发问题的代码段

public class KafkaStreamsMainClass {

    private KafkaStreamsMainClass() {
    }

    public static void main(final String[] args) throws Exception {
        Properties streamsConfiguration = new Properties();
        streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-streams");
        streamsConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-server:9092");
        streamsConfiguration.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, "schema-registry:8082");
        streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 10 * 1000);
        streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
        streamsConfiguration.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, GenericAvroSerde.class);
        streamsConfiguration.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, GenericAvroSerde.class);
        KStreamBuilder builder = new KStreamBuilder();
        KStream<GenericRecord, GenericRecord> sourceStream = builder.stream(SOURCE_TOPIC);

        KStream<GenericRecord, GenericRecord> finishedFiltered = sourceStream
                .filter((GenericRecord key, GenericRecord value) -> value.get("endTime") != null);

        KStream<GenericRecord, GenericRecord>[] branchedStreams = sourceStream
                .filter((GenericRecord key, GenericRecord value) -> value.get("endTime") == null)
                .branch((GenericRecord key, GenericRecord value) -> value.get("firstField") != null,
                        (GenericRecord key, GenericRecord value) -> value.get("secondField") != null);

        branchedStreams[0] = finishedFiltered.join(branchedStreams[0],
                (GenericRecord value1, GenericRecord value2) -> {
                    return value1;
                }, JoinWindows.of(TimeUnit.SECONDS.toMillis(2)));

        branchedStreams[1] = finishedFiltered.join(branchedStreams[1],
                (GenericRecord value1, GenericRecord value2) -> {
                    return value1;
                }, JoinWindows.of(TimeUnit.SECONDS.toMillis(2)));

        KafkaStreams streams = new KafkaStreams(builder, streamsConfiguration);
        streams.setUncaughtExceptionHandler((Thread thread, Throwable throwable) -> {
            throwable.printStackTrace();
        });
        streams.start();

        Runtime.getRuntime().addShutdownHook(new Thread(streams::close));
    }

}

我打开了rocksdbjni-5.0.1.jarMaven下载的档案,其中包括该librocksdbjni- win64.dll库。似乎它试图从RocksDB的外部而不是从内部检索库。

我正在Windows 7计算机上进行开发。

您是否遇到过这个问题?


问题答案:

我将kafka-streams项目更新为最新发布的版本1.0.0。

这个版本遇到了这个错误,但是在对其进行补丁并将其上传到内部Artifactory服务器上之后,我们能够在Windows和Linux上执行我们的kafka-
streams代理。下一个版本1.0.1和1.1.0将修复此错误,因此,一旦其中一个版本发布,我们将切换到它们而不是已修补的版本。

综上所述,Kafka的1.0.0版本解决了该错误。



 类似资料:
  • 线程“main”Java.lang.UnsatisfiedLinkError中出现异常:c:\users\jaiserpe\appdata\local\temp\pdnative7141399841793639340.dll:在Java.lang.ClassLoader$nativelibrary.load(本机方法)在Java.lang.ClassLoader.LoadLibrary0(clas

  • 这是我在一个在线连接4游戏的结尾处使用的动画: 他们将被动画化的顺序是什么?如何定义?因为如果我这样放的话,最左边的硬币首先会被激活,然后会有一个延迟,然后其他3个硬币就会弹出...我知道你可能需要一些更多的代码,但这部分680锁客户端代码(全部由我编写),我不想把它全部放在这里… 提前谢谢!

  • 我试图运行一个在Mac上访问Notes客户机的HelloWord Java应用程序。我在旧版本上工作过。目前我有Java1.8.0_101-B13和OS/X10.11.6。我尝试运行以下代码: 我在Eclipse运行配置中设置了。当我运行该应用程序时,我会得到: java.library.path:/applications/ibm Notes.app:/users/joe/library/jav

  • 我正在尝试使用Jprofiler的离线分析API将Jprofiler 8.1.4与jenkins集成。下面是写入的程序 > 开始JProfiler录制。 保存快照。 停止JProfiler录制。 导入java。io。文件导入java。io。IOException; 公共类TestJenJPIntegration{public static Connection connObj=null;publi

  • 有没有办法打开开发菜单或重新加载应用程序而不摇晃应用程序? Android无线wifi,无需usb线缆Windows 10 热装填或现场装填不够好,我的手臂受伤:)

  • 我更换了笔记本电脑,克隆了项目的存储库,快速安装了一个纱线,看起来与主分支上的有很大的不同,但我没有费心,因为可能只是因为节点版本不同。 现在,每次我点击一个文本输入,键盘只会在android上立即打开和关闭。我在这里附上了一个快速录音。尝试了一些解决方案,看起来像是在AndroidManifest中将android:WindowsofInputMode从adjustResize切换到adjust