首页 > 解决方案 > RocksDB NoClassDefFound - 如何为 Kafka 流设置 RocksDB

问题描述

我正在尝试使用 kstreams 解决问题。我目前在进行聚合时遇到了这个错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/rocksdb/RocksDBException
    at org.apache.kafka.streams.state.internals.RocksDbWindowBytesStoreSupplier.get(RocksDbWindowBytesStoreSupplier.java:50)
    at org.apache.kafka.streams.state.internals.RocksDbWindowBytesStoreSupplier.get(RocksDbWindowBytesStoreSupplier.java:24)
    at org.apache.kafka.streams.state.internals.WindowStoreBuilder.build(WindowStoreBuilder.java:40)
    at org.apache.kafka.streams.state.internals.WindowStoreBuilder.build(WindowStoreBuilder.java:26)
    at org.apache.kafka.streams.processor.internals.InternalTopologyBuilder$StateStoreFactory.build(InternalTopologyBuilder.java:141)
    at org.apache.kafka.streams.processor.internals.InternalTopologyBuilder.buildProcessorNode(InternalTopologyBuilder.java:966)
    at org.apache.kafka.streams.processor.internals.InternalTopologyBuilder.build(InternalTopologyBuilder.java:869)
    at org.apache.kafka.streams.processor.internals.InternalTopologyBuilder.build(InternalTopologyBuilder.java:822)
    at org.apache.kafka.streams.processor.internals.InternalTopologyBuilder.build(InternalTopologyBuilder.java:805)
    at org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:667)
    at org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:624)
    at org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:534)

我的代码实际上是这样的:

KStream<String, InputData> input = builder.stream(topicname);

KTable<Windowed<String>, CustomAgg> grouped =
                input.groupByKey()
                .windowedBy(TimeWindows.of(Duration.ofMillis(60000)))
                .aggregate(
                        CustomAgg::new,
                        (k, v, agg) -> agg.add(v),
                        Materialized.<String, CustomAgg, WindowStore<Bytes, byte[]>>as("aggs").withValueSerde(new CustomAggSerde()));
        grouped.toStream().print(Printed.toSysOut());

卡夫卡流版本 2.1.0

我似乎无法在网上找到任何关于如何为 kafka 流设置 RocksDB 的资源 - 任何建议都将不胜感激。(我已经用 brew 安装了它,但我不确定我需要如何指向它,任何设置,它是否需要在我的 pom.xml 文件等中)。目前在 MacOS 上工作以进行开发。

谢谢!

标签: apache-kafka-streams

解决方案


你不需要为 Kafka Streams 安装 RocksDB。RocksDB 是 Kafka Streams 的一个依赖。如果您将 Kafka Streams 作为构建自动化工具(例如 maven 或 gradle)中的依赖项,则 RocksDB JAR 应该在构建期间自动下载并放入您的类路径中。

如果没有构建自动化工具,您可能需要手动将 RocksDB JAR 放在类路径中。RocksDB for Kafka Streams 2.1.0 的正确版本应该是 5.14.2。

您得到的错误似乎是类路径问题,因此可能与上述有关。


推荐阅读