使用 Kafka 流处理 window 中的项目
Process item in a window with Kafka streams
我正在尝试使用 kafka 流在滑动 window 中处理一些事件,但我想我不了解 kafka 流的一些细节,所以我无法做我想做的事。
我有什么:
- 输入事件的主题 key/value 喜欢 (Int, Person)
我想要什么:
- 在滑动 window 10 分钟内阅读这些事件
- 处理滑动中的每个元素window
- 过滤并计算一些元素,向另一个kafka触发一些事件
主题(比如检测到错误值)
为了简单起见:在 10 分钟的滑动 window 中获取所有事件,对它们执行 foreach,在 window 的上下文中计算一些 stats/events,继续到下一个 window...
我尝试了什么:
我尝试混合 Stream 和处理器 API,例如:
val streamBuilder = new StreamsBuilder()
streamBuilder.stream[Int, Person](topic)
.groupBy((_, value) => PersonWrapper(value.id, value.name))
.windowedBy(TimeWindows.of(10 * 60 * 1000L).advanceBy(1 * 60 * 1000L))
// now I have a window of (PersonWrapper, Person) right ?
streamBuilder.build().addProcessor(....)
现在我将向此拓扑添加一个处理器来处理滑动的每个事件 window。
我不明白什么是 TimeWindowStream 以及为什么我们应该有一个 KGroupedStream 来对事件应用 Window。如果有人可以启发我有关 Kafka 流以及我正在尝试做的事情。
您是否阅读了文档:https://docs.confluent.io/current/streams/developer-guide/dsl-api.html#windowing
- 窗口化是一种特殊的分组形式(根据时间分组)
- 在 Kafka Streams 中计算聚合总是需要分组
- 在你有一个分组和窗口流后,你调用
aggregate()
进行实际处理(不需要手动附加 Processor
;对 aggregate()
的调用将隐式添加一个 Processor
给你)。
Btw: Kafka Streams does not really support "sliding windows" for aggregation. The window you define is called a hopping window.
KGroupedStream
和 TimeWindowedKStreams
基本上只是助手 类 和允许流畅 API 设计的中间表示。
教程也是入门的好方法:https://docs.confluent.io/current/streams/quickstart.html
您还应该查看示例:https://github.com/confluentinc/kafka-streams-examples
我正在尝试使用 kafka 流在滑动 window 中处理一些事件,但我想我不了解 kafka 流的一些细节,所以我无法做我想做的事。
我有什么:
- 输入事件的主题 key/value 喜欢 (Int, Person)
我想要什么:
- 在滑动 window 10 分钟内阅读这些事件
- 处理滑动中的每个元素window
- 过滤并计算一些元素,向另一个kafka触发一些事件 主题(比如检测到错误值)
为了简单起见:在 10 分钟的滑动 window 中获取所有事件,对它们执行 foreach,在 window 的上下文中计算一些 stats/events,继续到下一个 window...
我尝试了什么: 我尝试混合 Stream 和处理器 API,例如:
val streamBuilder = new StreamsBuilder()
streamBuilder.stream[Int, Person](topic)
.groupBy((_, value) => PersonWrapper(value.id, value.name))
.windowedBy(TimeWindows.of(10 * 60 * 1000L).advanceBy(1 * 60 * 1000L))
// now I have a window of (PersonWrapper, Person) right ?
streamBuilder.build().addProcessor(....)
现在我将向此拓扑添加一个处理器来处理滑动的每个事件 window。 我不明白什么是 TimeWindowStream 以及为什么我们应该有一个 KGroupedStream 来对事件应用 Window。如果有人可以启发我有关 Kafka 流以及我正在尝试做的事情。
您是否阅读了文档:https://docs.confluent.io/current/streams/developer-guide/dsl-api.html#windowing
- 窗口化是一种特殊的分组形式(根据时间分组)
- 在 Kafka Streams 中计算聚合总是需要分组
- 在你有一个分组和窗口流后,你调用
aggregate()
进行实际处理(不需要手动附加Processor
;对aggregate()
的调用将隐式添加一个Processor
给你)。
Btw: Kafka Streams does not really support "sliding windows" for aggregation. The window you define is called a hopping window.
KGroupedStream
和 TimeWindowedKStreams
基本上只是助手 类 和允许流畅 API 设计的中间表示。
教程也是入门的好方法:https://docs.confluent.io/current/streams/quickstart.html
您还应该查看示例:https://github.com/confluentinc/kafka-streams-examples