gpt4 book ai didi

apache-kafka - Kafka Streams - 跳跃窗口 - 去重 key

转载 作者:行者123 更新时间:2023-12-03 18:22:20 25 4
gpt4 key购买 nike

我正在每 5 分钟推进一次的 4 小时窗口上进行跳跃窗口聚合。由于跳跃窗口重叠,我得到了具有不同聚合值的重复键。

TimeWindows.of(240 * 60 * 1000L).advanceBy(5 * 60* 1000L)

如何消除具有重复数据的重复键或仅选择包含最新值的键。

最佳答案

除了迈克尔所写的内容之外,在跳跃窗口中还有另一层“重复”。由于窗口重叠,从后续窗口发出的值可能相同。
例如,假设您有一个五分钟的窗口,一分钟的跳跃:{0..5},{1..6},{2..7}等等。来自输入主题的给定记录可能属于不同的时间窗口。

这与滚动窗口相反,窗口不重叠,因此每个记录都是单个窗口的一部分。不幸的是,滚动窗口并不适合所有用例;一个例子可以是聚合,其中具有相同键的两条记录落在两个后续窗口的边缘。

使用跳跃窗口时,有多种方法可以“重复数据删除”。一种方法是在下游“重复数据删除”。另一种方法是在 Kafka Streams 中执行此操作,但这仅与特定拓扑相关。正如所解释的,这些结果不是真正的重复,而是连续窗口的结果。如果您只想要某个键的最后一个窗口的结果,您可以编写如下内容:

windowedKtable
.toStream((windowedKey, value) -> windowedKey.key())
.groupByKey()
.reduce((value1, value2) -> value1.lastestActivity() > value2.lastestActivity() ? value1 : value2)

我不会说这是最佳实践,只是在非常特定的情况下克服问题的一种方法。

更多关于 Kafka Streams 中的窗口:
https://docs.confluent.io/current/streams/developer-guide/dsl-api.html#windowing

关于apache-kafka - Kafka Streams - 跳跃窗口 - 去重 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771904/

25 4 0