apache-kafka-streams - Kafka Streams Rocksdb 保留没有使用窗口函数删除旧数据
问题描述
我正在运行具有窗口功能的 Kafka 流应用程序。但运行 24 小时后,本地磁盘使用量从 5G 增加到 20G 并不断增加。根据我的谷歌搜索,一旦我介绍了windowedBy
它,它应该会自动删除旧数据。
我的拓扑如下所示:
stream.selectKey(selectKey A)
.groupByKey(..)
.windowedBy(TimeWindows.of(Duration.ofMinutes(60)).grace(Duration.ZERO))
.reduce((value1,value2) -> value2)
.suppress.toStreams()
.selectKey(selectKey B).mapValues().filter()
.groupByKey().reduce.toStream().to()
我无法理解的一件事是,从这个拓扑结构中,它将创建两个内部重新分区主题,repartition-03
以及repartition-14
两个groupBy
动作。从磁盘来看,所有正在repartition-03
执行任务的机器都具有很高的磁盘使用率,并且似乎永远不会删除旧数据,而正在运行repartition-14
任务的机器总是处于低磁盘使用率状态。
当我登录机器时,我发现这两台机器的路径不同,如下所示:
/tmp/kafka-streams/test-group/2_40/rocksdb/KSTREAM-REDUCE-STATE-STORE-0000000014
/tmp/kafka-streams/test-group/1_4/KSTREAM-REDUCE-STATE-STORE-0000000003/KSTREAM-REDUCE-STATE-STORE-0000000003.1568808000000
为什么他们有不同的路径?2_40
用于repartition-14
任务,它rocksdb
在路径中,而另一个不包含rocksdb
. 同时,taks1_4
保留了几个类似KSTREAM-REDUCE-STATE-STORE-0000000003.1568808000000
但后缀不同的文件夹。
我虽然一旦我引入了 windowedBy 函数,rocksdb 会在窗口过期时删除旧数据?为什么上述两个内部重新分区主题具有不同的路径和保留行为?
非常感谢任何帮助!谢谢!
解决方案
默认保留期为 24 小时。你可以通过减少它
.reduce(..., Materialized.with(...).withRetention(...));
推荐阅读
- d3.js - 为什么页面上只显示澳大利亚的一部分--GeoJson
- unit-testing - 如何使用 jasmine 对某些东西进行单元测试!== 并检查标志?
- vue.js - 如何通过单击按钮动态添加新的 vue 实例?
- html - 围绕多个轴旋转 svg 元素
- html - 移动响应 css - 图像未重新缩放
- regex - 正则表达式正前瞻与预期不匹配
- python - 如何改进这个脚本(刽子手游戏)?
- php - 关于 n 维数组的 PhP 问题 - Bob the Robot 去购物?
- go - HTTPS 连接在浏览器中出现隐私错误。- 球童服务器
- machine-learning - VC Dimension 和 PAC 学习