每个键的动态 window 聚合
Dynamic window aggregation for each key
我有一个特定的用例,我在其中使用来自单个主题的数据。
该主题接收包含特定类型的消息。
我的服务在这些类型和时间之间有一个映射 window(例如类型 X 是 1 小时,类型 Y 是 2 小时,等等)。
我想知道的是 - 是否有可能创建一个单一的流,它将能够使用一条消息,获取它的类型,然后根据我拥有的映射创建一个动态大小的 window 聚合。
例如,假设我的主题包含 3 条消息,并且我的服务具有以下映射:
Tpye X - 1 hour, Type Y - 2 hours
这些是当前在我的 Kafka 输入主题中的消息:
1. Type X
2. Type Y
3. Type X
当第一条消息到达时,我希望为类型 X 创建一个持续 1 小时的 window 聚合。一小时结束后,我希望发生某种业务逻辑。
当第二条消息到达时,它是 Y 类型的,因此创建了一个不同的 window 2 小时,完成后我还想要一些特定的代码 运行。
我知道我可以通过将消息分隔到指定的主题(每个消息类型一个)来实现这一点,但是类型是动态的,我想避免 creating/destroying 个主题。
我也查看了 Session windows,但不活动间隔仍然是静态的,它没有解决我的用例。
看来您要找的不是窗口本身,而是某种计时器。 Kafka Streams 不提供现成的计时器。然而,解决它的一种方法是使用处理器 API 安排标点符号:
https://docs.confluent.io/current/streams/developer-guide/processor-api.html#defining-a-stream-processor
但它仍然需要一个固定的参数——即不是动态的。如果这是绝对必要的,也可以通过 registring a timer using Apache Flink for example.
来完成
。
定时标点功能
Kafka Streams 使用 固定时间 标点符号时,有一种可能性:
分开,即将不同类型的流分支
实现自定义 Processor
class:
https://gist.github.com/dvcanton/45818abf4903b54f9fb0028025b6729a
我有一个特定的用例,我在其中使用来自单个主题的数据。 该主题接收包含特定类型的消息。
我的服务在这些类型和时间之间有一个映射 window(例如类型 X 是 1 小时,类型 Y 是 2 小时,等等)。 我想知道的是 - 是否有可能创建一个单一的流,它将能够使用一条消息,获取它的类型,然后根据我拥有的映射创建一个动态大小的 window 聚合。
例如,假设我的主题包含 3 条消息,并且我的服务具有以下映射:
Tpye X - 1 hour, Type Y - 2 hours
这些是当前在我的 Kafka 输入主题中的消息:
1. Type X
2. Type Y
3. Type X
当第一条消息到达时,我希望为类型 X 创建一个持续 1 小时的 window 聚合。一小时结束后,我希望发生某种业务逻辑。 当第二条消息到达时,它是 Y 类型的,因此创建了一个不同的 window 2 小时,完成后我还想要一些特定的代码 运行。
我知道我可以通过将消息分隔到指定的主题(每个消息类型一个)来实现这一点,但是类型是动态的,我想避免 creating/destroying 个主题。
我也查看了 Session windows,但不活动间隔仍然是静态的,它没有解决我的用例。
看来您要找的不是窗口本身,而是某种计时器。 Kafka Streams 不提供现成的计时器。然而,解决它的一种方法是使用处理器 API 安排标点符号: https://docs.confluent.io/current/streams/developer-guide/processor-api.html#defining-a-stream-processor
但它仍然需要一个固定的参数——即不是动态的。如果这是绝对必要的,也可以通过 registring a timer using Apache Flink for example.
来完成。
定时标点功能Kafka Streams 使用 固定时间 标点符号时,有一种可能性:
分开,即将不同类型的流分支
实现自定义
Processor
class: