问题标签 [rocksdb-java]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-kafka - Kafka KeyValueStore - 删除方法不起作用
我正在尝试在我的一个 Kafka 处理器中安排一项任务,以从本地 KeyValueStore (RocksDB) 中删除记录。即使到目前为止没有出现异常,也没有任何记录被删除。这是我的代码:
}
apache-kafka - 删除后 RocksDB 未释放空间
我们的大多数服务都使用 Kafka 存储,如您所知,它在后台使用 RocksDB。我们正在尝试每 6 小时删除一次过时且格式错误的记录,以释放空间。即使该记录已从 RocksDB 中删除(添加了一个墓碑并且该记录不再可用),我们也没有看到空间发生任何变化。
我想,需要触发压缩,以便压缩已删除的记录。但是,据我所知,只有当 L0 文件的数量达到 level0_file_num_compaction_trigger 时才会触发分级压缩。由于我的服务几乎不消耗任何数据(在开发环境中),我相信无法触发压缩,因此“已删除”记录仍然存在。
请注意,我们只使用默认的 RocksDB 配置。我还注意到,当我在自定义 RocksDB 配置中使用 #options.setDeleteObsoleteFilesPeriodMicros() 时,本地存储的大小会急剧下降。但是,我不确定该方法究竟做了什么。
我还读到,可以选择使用压缩过滤器进行定期压缩。但是,我不确定如何使用 Java 添加一个。
apache-kafka - Kafka KeyValue 存储的磁盘空间在删除后未更新
我的服务正在使用 Kafka 键值存储。我已经在两个处理器中安排了两个任务,这些任务从存储中删除了格式错误和过时的记录。但是,我只有在停止本地实例后才能看到更新的磁盘空间。我检查了,无论任务是否正在运行,从我的 java 进程到 RocksDB 都有很多句柄。
这是我的代码:
}
其他处理器的init方法中的代码几乎相同。我正在使用默认的 RocksDB 配置。任何帮助,将不胜感激。
rocksdb - RocksDb Java API 对事务的支持
RocksJavaAPI 是否支持事务?我看到 JAR 中有一个 Transaction DB 类。我无法对事务 Db 类进行开始事务。
我无法执行 db.beginTransaction,因为此类方法不可用。任何有关如何在 Java 中完成的指针都值得赞赏。
rocksdb - 在rocksdb中按键排序
我正在尝试在 java 中将大量数据与 2 个文件夹条目 folder1 和 folder2 进行比较。每个文件夹包含几个文件,每个文件大小约为 10 MB。我在每个文件夹中有大约 100 个文件。每个文件都包含一个键值行,例如(每个文件夹总共大约有 5 亿行):
- 第一步
首先,在我上面的示例中,从 folder1 中读取所有文件的每一行并将其加载到rocksdb中
- 第二步
一旦我的rocksdb 充满了folder1 数据,对于在folder2 中读取的每一行,我调用folder1 的rocksdb get() 方法来检查为folder2 行提取的密钥是否存在于rocksdb 中。当我不存在时,它返回 null。请注意,我不能使用rocksdb keyMayExist() 方法,因为当您操作大量数据时它会返回误报结果。
当 folder1 中的数据根据键值排序时,性能是正确的。
但是当输入数据未排序时,我的持续时间乘以 3(我使用 shell 命令对它们进行了混洗)。这很奇怪,因为在我的测试中,我将 unsort folder1 复制到 folder2 中(只是复制我的文件夹)。因此,即使文件夹 1 未排序,文件夹 2 也未排序,其方式与文件夹 1 完全相同。
我的问题是如何按键排序我的rocksdb?
java - Kafka RocksDB 不断增长的磁盘大小
我有一个 kafka 流应用程序,它获取仓库库存流和最新价格流,并根据这些价格计算每个库存的价值。
我收到一个库存更新,作为带有关键warehouseId 的流。
我总共有 ~100 个定价商品和 ~10 个仓库
我对 kafka-state 中 RocksDB 文件的大小不断增加有疑问。
代码如下
RocksDB 文件的大小已经稳定增长了一周左右。我没有看到空间被回收。kstream toTable 操作似乎占用了大部分空间。我无法弄清楚为什么磁盘空间没有被释放,因为新条目相互替换。
我确定 object 的equals
和hashCode
函数InventoryKey
写得正确。
rocksdb - 可以在数据库打开时使用 java 库更改 RocksDB 设置吗?
使用java库,任何配置更改都可以在不需要重新打开数据库的情况下生效吗?例如level0SlowdownWritesTrigger
.
更多上下文:我正在尝试在批量加载模式和常规模式之间切换。例如,在应用启动时禁用自动压缩,加载数据,然后启用自动压缩。在测试中,这使我的初始加载时间减少了 75%。
问题是更改Options
不会生效,至少在我制作它们的方式上。我不想重新打开数据库,因为这会使现有的数据流处理复杂化。
我试过的示例代码。在此示例中,我正在更改选项中的自动压缩设置。
java - 获取 org.rocksdb.RocksDBException:块中的错误条目
我正在使用rocksDB来存储键是字符串,值是整数的数据。最近我的应用程序在写入岩石时抛出了以下异常。
当条目数约为 3.5 亿且数据库大小约为 18GB 时,该错误首先开始发生。这个问题很难重现,我试图通过放置近 7 亿个条目来重现它,但无法做到。我正在使用RocksDB 版本 6.13.3并为 RocksDB 使用以下选项:
有谁知道这个异常的原因可能是什么?
database - 有没有办法从 RocksDb 中的“ColumnFamilyName”中检索“ColumnFamilyHandle”?
或者,有没有办法ColumnFamilyHandles
从数据库中获取所有当前打开的文件?
我知道静态函数RocksDB.listColumnFamilies
。但这会返回一个List<byte[]> List containing the column family names
. 不知道有没有办法ColumnFamilyHandle
从这里过去。
apache-flink - 无法创建类原因:com.esotericsoftware.kryo.KryoException: java.io.EOFException: 没有更多字节了
我发现在特定的小型集群和本地机器中运行作业时出现问题。这项工作在大型机器上运行顺畅。我在用着:
- com.twitter "chill-protobuf" 0.7.6
- .排除 com.esotericsoftware.kryo “kryo”
- com.google.protobuf "protobuf-java" 3.18.1
我在用着:
登录到一个任务管理器我可以看到路径/opt/flink/rocksdb
有 1GB 并且 k8s 没有指示 DiskPressure。
并使用以下资源:
与其他运行良好且负载更大的集群相比,2 个 6G 的 TM 太多了。
我收到以下错误:
Protobuf + Kryo read + EOFException 表明问题可能是读取检查点或保存点。
我应该看什么?