窗口组之后的Kafka流总和数据

问题描述 投票:1回答:1

我有一个仓库应用程序,在其中我需要按小时计算总库存。所有项目移动数据都发送到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项

  • 聚合流结果(按窗口)是这个:

  • item @ 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

我有一个仓库应用程序,在其中我需要按小时计算总库存。所有项目移动数据都发送到kafka流(添加/删除)。这意味着,我可以每小时获取一次...

apache-kafka apache-kafka-streams
1个回答
0
投票

阅读不同类型的开窗技术可能很有用。在您的情况下,滑动时间窗可能是解决方案。在此处检查替代项:https://kafka.apache.org/25/documentation/streams/developer-guide/dsl-api.html#windowing

© www.soinside.com 2019 - 2024. All rights reserved.