每个键的动态窗口聚合

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

我有一个特定的用例,在这个用例中,我正在从一个单一的主题中消耗数据.该主题接收包含特定类型的消息。

我的服务在这些类型和时间窗口之间有一个映射(例如类型X是1小时,类型Y是2小时,等等)。我想知道的是--是否有可能创建一个单一的流,它能够消耗一个消息,获取它的类型,然后根据我的映射创建一个动态大小的窗口聚合。

例如,假设我的主题包含3条消息,而我的服务有以下映射。

Tpye X - 1 hour, Type Y - 2 hours

而这些是当前在我的Kafka输入主题中的消息。

1. Type X
2. Type Y
3. Type X

当第一条消息到达时,我想为X类型创建一个窗口聚合,持续1小时。一旦一小时结束,我希望发生某种业务逻辑.当第2个消息到达时,它的类型是Y,所以创建了一个不同的窗口,持续2小时,同样一旦结束,我希望一些特定的代码运行。

我知道,我可以通过将消息分离到指定的主题(每个消息类型一个)来实现,但类型是动态的,我想避免创建摧毁主题。

我也看了作为Session窗口,然而不活动间隙仍然是静态的,它不能解决我的用例。

kafka-consumer-api apache-kafka-streams
1个回答
1
投票

看来你要找的不是窗口本身,而是某种定时器。Kafka Streams不提供定时器。然而,一种方法是使用Processors API来调度一个Punctuator。https:/docs.confluent.iocurrentstreamsdeveloper-guideprocessor-api.html#defining-a-stream-processor#。

但它仍然需要一个固定的时间参数,即不是动态的。如果严格意义上的需要,也可以通过以下方式实现 例如,使用Apache Flink注册一个定时器。.

.

固定时间标点功能

以下是使用 定时 Kafka流的标点符号。

  1. 分开,即为不同类型的流提供分支。

  2. 实施自定义 Processor 类。

Custom Processor implematation https:/gist.github.comdvcanton45818abf4903b54f9fb0028025b6729a。

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