Java 监视一系列事件一段时间,然后做出决定
我是个新手 无论我看到什么教程,都将重点放在具有动态数据的非常简单的逻辑上如x秒内温度>100等Java 监视一系列事件一段时间,然后做出决定,java,apache-flink,complex-event-processing,Java,Apache Flink,Complex Event Processing,我是个新手 无论我看到什么教程,都将重点放在具有动态数据的非常简单的逻辑上如x秒内温度>100等 How do I bring in a a logic like this 1. When the temperature is 90 deg for 10 consecutive records 2. When the temperature for the last 10 minutes is < 90 如何引入这样的逻辑 1.当温度为90℃时,连续记录10次 2.当最后10分钟的温度
How do I bring in a a logic like this
1. When the temperature is 90 deg for 10 consecutive records
2. When the temperature for the last 10 minutes is < 90
如何引入这样的逻辑
1.当温度为90℃时,连续记录10次
2.当最后10分钟的温度<90
一个棘手的问题,apache flink是否支持这种模式
我可以在x秒内看到
,
,但没有什么能像在x分钟内/在x记录上那样,
,你当然可以用Flink解决这样的用例
我将在下面用Flink的窗口操作符勾勒出一些解决方案。请注意,使用自定义函数/运算符也有其他方法可以实现这一点,它们可以提供更低的延迟和更少的状态来处理,但需要更多的用户定义代码
当温度为90°时,连续记录10次:
这可以使用一个滑动窗口来完成,该窗口收集十条记录,并按一条记录收集幻灯片。您应该将窗口函数实现为一个reduce函数,该函数立即将窗口记录合并为一个布尔值,该布尔值对所有温度是否大于90度进行编码。这将把空间需求减少到每个窗口一条记录,即一次10条记录(因为同时计算10个窗口)。请注意,计数窗口可能会有问题,因为在分布式流处理器中,排序有点难以推理
当温度在过去10分钟内超过90度时:
这可以通过滑动时间窗口来实现,例如,超过10分钟的时间窗口可以滑动一分钟。这将为您提供1分钟的分辨率,即,它将每分钟检查最后10分钟的温度。同样,每个窗口都有一条记录(10分钟/1分钟窗口每次记录10条,10分钟/30秒窗口每次记录20条,…)。另一个逻辑与上述计数方法相同。如果使用事件时间逻辑,则可以控制带有无序时间戳的记录
根据您的用例,窗口方法可能就足够了。如果您需要更好的延迟或具有更好的性能,您还可以在有状态的FlatMapFunction
(最后10条记录)或有状态的ProcessFunction
中实现您的用例,这使您能够访问时间戳和水印,以实现更好的时间控制
Flink的CEP库可以检测到更复杂的模式。这确实是一个很好的开始。谢谢你的指点。顺便说一句,你是如何进入那篇文章的。我看到它在这里。我如何进入这篇文章。因为“窗口”这个词是关键,如果我有,我会马上用谷歌搜索它!