首页 > 解决方案 > 合并两个时间窗口的最佳模式是什么

问题描述

我有一个 TimeWindowed KTable

stream.table("topicA")
      .groupByKey()
      .windowedBy(TimeWindows.of(TimeUnit.HOURS.toMillis(1L))
      .until(TimeUnit.DAYS.toMillis(1L)))
      .reduce((value1, value2) -> value2,
              Materialized.as("A-Store"))

现在我在 TopicA 中放置了 4 个事件,

key1 Event1 currentTime -90 min
key2 Event2 currentTime -45 min
key1 Event3 currentTime -30 min
key3 Event4 currentTime -15 min

如果我使用以下命令从 KTable 获取事件,则不会

fetchAll(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2),
         System.currentTimeMillis())

正如预期的那样,我收到了来自商店的 4 个事件,包括两个 key1 事件传递不同的时间窗口......

现在 KTable 正常运行模式总是为 key 传递最新事件,我应该如何处理这种情况?当然我可以创建一个地图并在那里插入事件然后回忆,但这似乎很笨拙。

有没有更好的方式来处理这个问题,从 2 个不同的时间窗口收集数据并将它们合并?

标签: apache-kafka-streams

解决方案


推荐阅读