gpt4 book ai didi

apache-kafka-streams - Kafka流聚合是否有任何订购保证?

转载 作者:行者123 更新时间:2023-12-04 17:31:59 25 4
gpt4 key购买 nike

我的Kafka主题包含由deviceId键控的状态。我想使用KStreamBuilder.stream().groupByKey().aggregate(...)仅将状态的最新值保留在TimeWindow中。我猜想,只要按键对主题进行分区,聚合函数就可以始终以这种方式返回最新值:
(key, value, older_value) -> value

这是我对Kafka Streams的期望吗?我应该使用自己的检查时间戳的处理方法吗?

最佳答案

Kafka Streams保证按的顺序偏移的顺序,但不按时间戳的顺序进行排序。因此,默认情况下,“上次更新获胜”策略基于偏移量而不基于时间戳。延迟到达的记录(在时间戳上定义的“晚期”)基于时间戳是乱序的,因此不会重新排序以保持原始偏移量的顺序。

如果要使窗口包含基于时间戳的最新值,则需要使用Processor API(PAPI)来使此工作有效。

在Kafka Streams的DSL中,您无法访问获得正确结果所需的记录时间戳。一种简单的方法可能是将.transform()放在.groupBy()之前,然后将时间戳添加到记录本身(即其值)。因此,您可以在Aggregator中使用时间戳记(顺便说一句,使用更简单的.reduce()也可以代替.aggregate()起作用)。最后,您需要在.mapValues()之后执行.aggregate(),以再次从值中删除时间戳。

使用DSL和PAPI的这种混合匹配方法可以简化您的代码,因为您可以使用DSL窗口支持和KTable,而无需执行低级的时间窗口和状态管理。

当然,您也可以在单个低级有状态处理器中完成所有这些操作,但是我不建议这样做。

关于apache-kafka-streams - Kafka流聚合是否有任何订购保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41548370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com