apache-kafka-streams - 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 上工作以进行开发。
谢谢!
解决方案
你不需要为 Kafka Streams 安装 RocksDB。RocksDB 是 Kafka Streams 的一个依赖。如果您将 Kafka Streams 作为构建自动化工具(例如 maven 或 gradle)中的依赖项,则 RocksDB JAR 应该在构建期间自动下载并放入您的类路径中。
如果没有构建自动化工具,您可能需要手动将 RocksDB JAR 放在类路径中。RocksDB for Kafka Streams 2.1.0 的正确版本应该是 5.14.2。
您得到的错误似乎是类路径问题,因此可能与上述有关。
推荐阅读
- authorization - 使用 Canary 将默认当前用户覆盖为 Guardian 当前用户
- sql - Oracle SQL 使用欧几里德距离执行局部异常因子 (LOF)
- python - VS Code Python pip 无法识别
- javascript - Javascript如何重命名对象键维护值和位置
- python - 张量流中的 tf.matmul(X,weight) 与 tf.matmul(X,tf.traspose(weight))
- python-3.x - Flappy Bird pygame 基础未定义
- node.js - 类验证器不区分大小写的枚举验证?
- android - 尝试在 Firebase 中使用自定义身份验证登录时应用程序崩溃
- jquery - jQuery:包装单独的集合
- php - 在服务器上安排数千个任务 [PHP 脚本]