Kafka стримит в Windows 7 в поисках dll rockdb

У меня есть программа потоков Kafka. Это 64-битная машина с Windows, и на ней работает автономный сервер Kafka. Версия Java - java 8. В коде pom есть зависимости от клиента Kafka и потокового API, а версии являются последними, т.е. 0.10.2. Всякий раз, когда я запускаю приложение потоков, оно ищет dll-файл rockdb в моем доме пользователя и терпит неудачу. Кто-нибудь сталкивался с такой же проблемой? Один и тот же код работает на разных машинах с Windows 64.

пом

<dependencies>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>0.10.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
        <version>0.10.2.1</version>
    </dependency>
</dependencies>

Трассировка стека

Exception in thread "StreamThread-1" java.lang.UnsatisfiedLinkError: C:\Users\abcd\AppData\Local\Temp\librocksdbjni8989756873626302713.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:117)
at org.apache.kafka.streams.state.internals.Segment.openDB(Segment.java:38)
at org.apache.kafka.streams.state.internals.Segments.getOrCreateSegment(Segments.java:76)
at org.apache.kafka.streams.state.internals.RocksDBSegmentedBytesStore.put(RocksDBSegmentedBytesStore.java:73)
at org.apache.kafka.streams.state.internals.ChangeLoggingSegmentedBytesStore.put(ChangeLoggingSegmentedBytesStore.java:55)
at org.apache.kafka.streams.state.internals.MeteredSegmentedBytesStore.put(MeteredSegmentedBytesStore.java:101)
at org.apache.kafka.streams.state.internals.RocksDBWindowStore.put(RocksDBWindowStore.java:110)
at org.apache.kafka.streams.state.internals.RocksDBWindowStore.put(RocksDBWindowStore.java:102)
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.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:627)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:361)

person Mudit bhaintwal    schedule 22.06.2017    source источник
comment
См. stackoverflow.com/questions/43742423.   -  person Michael G. Noll    schedule 22.06.2017
comment
но это просто взлом. Это 2017 год, а у Kafka нет полной поддержки Windows!!!   -  person Mudit bhaintwal    schedule 22.06.2017
comment
Строго говоря, это проблемы RocksDB — поскольку Streams API по умолчанию зависит от RocksDB, мы наследуем эту проблему оттуда. Вы также можете заменить RocksDB другим механизмом хранения, который работает в Windows. В среднесрочной и долгосрочной перспективе мы хотим иметь лучшую поддержку Windows, но мы этого не делаем. Однако это работает для некоторых версий Windows...   -  person Matthias J. Sax    schedule 22.06.2017
comment
Спасибо, Матиас. Любой указатель, как заменить и какая БД работает лучше вместо Rocksdb.   -  person Mudit bhaintwal    schedule 22.06.2017
comment
Мудит: Какую версию Windows вы используете? Мой быстрый тест с Kafka Streams API в Windows 10 (с Oracle Java 8) работал сразу после установки. На стороне сервера Kafka, кстати, не рекомендуется использовать Windows для работы в продакшене.   -  person Michael G. Noll    schedule 23.06.2017
comment
Михаил - Это Win 7, Service Pack-1, 64 бит и java 1.8. Моя машина для разработки - это Windows, поэтому нет возможности перейти на Linux. Есть ли способ изменить эту базу данных по умолчанию на что-то, что работает в Windows. Более того, один из моих друзей с более тонкой конфигурацией может запускать тот же код!!! Я полностью смущен теперь этим странным поведением.   -  person Mudit bhaintwal    schedule 23.06.2017
comment
Главный вопрос в том, поддерживает ли RocksDB эту версию вообще. Вам следует поговорить с людьми из RocksDB: github.com/facebook/rocksdb/issues Тем не менее, вы можете подключите любой магазин к Kafka Stream: вы можете реализовать интерфейс StateStoreSupplier и StateStore и передать магазин вашему оператору с помощью соответствующей перегрузки, которая принимает поставщика магазина. Таким образом, вы можете заменить RocksDB любым другим хранилищем, которое хотите использовать.   -  person Matthias J. Sax    schedule 27.06.2017