【发布时间】:2020-09-13 22:07:35
【问题描述】:
我有一个仓库应用程序,我需要在其中按小时计算总库存。
所有项目移动数据都发送到 kafka 流(添加/删除)。
这意味着,我可以使用窗口化的 kafka 流获得每小时聚合的运动,就像这样
sourceStream
.mapValues((k, v) -> v.getType().equalsIgnoreCase("ADD") ? v.getQuantity() : -1 * v.getQuantity())
.groupByKey().windowedBy(TimeWindows.of(Duration.ofHours(1)))
.reduce(Long::sum, Materialized.with(stringSerde, longSerde)).toStream().to("hourly-movement");
但是我怎样才能根据这个汇总结果获得总库存呢?
例如,对于这个数据集,假设起始库存为零:
- 09:15 : +50 项
- 09:20 : +10 项
- 09:50 : +10 项
- 10:35 : -40 项
- 10:55 : -20 项
聚合流结果(按窗口)是这样的:
- 项目@09:00/10:00 : 70
- item@10:00/11:00 : -60
我需要在前端创建小时图表,意味着我需要这个数据集:
- item@09:00/10:00 : 70(初始 + 一小时内移动)
- item@10:00/11:00 : 10(项目在 10:00 + 下一小时移动,即 70 - 60)
我怎样才能得到这样的数据集?原始源流来自stream-logistic-movement。
【问题讨论】:
标签: apache-kafka apache-kafka-streams