当事件时间在 ts 到 ts -1 分钟之间的所有消息中满足条件时,kafka 会生成消息

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

我想处理kafka消息,考虑到eventTime,我接收非线性格式的数据 我想在收到以下 JSON 格式的消息后向新主题生成消息,并且如果我得到一个条件,即

eventTime
eventTime - 1min
之间的所有消息都满足
abs(valueA - ValueB) > 10

的条件
"UserID":222,"eventTime":04-03-2024 12:13:48,"ValueA":90,"ValueB":71
"UserID":222,"eventTime":04-03-2024 12:13:44,"ValueA":94,"ValueB":66
"UserID":222,"eventTime":04-03-2024 12:13:47,"ValueA":92,"ValueB":65
"UserID":222,"eventTime":04-03-2024 12:13:46,"ValueA":99,"ValueB":65
"UserID":222,"eventTime":04-03-2024 12:13:45,"ValueA":80,"ValueB":70

请针对此问题建议任何客户端库/流处理框架

我尝试了redis缓存机制,但数据没有用eventTime键排序

java apache-spark apache-kafka apache-flink apache-kafka-streams
1个回答
0
投票

这似乎是 Flink 内置 Windowing 功能的一个相当标准的用例,它支持不同类型的预构建窗口策略(翻滚、滑动、会话、自定义等)以及对窗口内的评估,以便您可以控制从它们发出的内容。

它还根据您的需求支持键控和非键控(特别是在并行处理方面,例如您需要在“用户”级别而不是针对更大的群体执行相同的操作符。

在这种情况下,您可能会考虑:

  • 将您的
    eventTime
    指定为用于窗口目的的属性
  • 可能由您的用户对您的流进行关键操作
    UserId
  • 定义一分钟滚动窗口(或自定义窗口)
  • 定义一个有状态的窗口转换,使您能够评估发射约束并确定是否需要发射信号

根据您的需求,有很多方法可以实现这一点,但 Flink 无疑是一个强大的工具。

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