java监视一段时间的事件,然后做出决定


0

我是个滑石初学者。

我所看到的教程都集中在非常简单的逻辑和动态数据上。比如当温度在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

一个乏味的问题,apacheflink支持这种模式吗

我能在x秒内看到,但没有什么比x分钟/x记录更好的了

1 答案


0

你当然可以用Flink来解决这样的用例。

下面我将使用Flink的窗口操作符绘制一些解决方案。请注意,还有其他方法可以使用自定义函数/运算符来实现这一点,它们可以提供较低的延迟和较少的状态来处理,但需要更多的用户定义代码。

    连续10次记录温度为90度时:

这可以使用一个滑动窗口来完成,该窗口收集10条记录,并按一条记录滑动幻灯片。您应该将window函数实现为一个ReduceFunction,该函数会立即将窗口的记录 coalesce 为一个布尔值,该值对所有温度是否大于90℃进行编码。这将把空间需求减少到每个窗口一个记录,即一次10个记录(因为同时计算10个窗口)。注意,计数窗口可能会有问题,因为在分布式流处理器中,排序有点难以 explain。

    当温度在过去10分钟内超过90摄氏度时:

这可以使用滑动时间窗口来完成,例如,一个超过10分钟的窗口可以滑动一分钟。这将给你1分钟的分辨率,也就是说,它将每分钟检查最后10分钟的温度。同样,每个窗口都有一个记录(对于10min/1min的窗口,每次10个记录;对于10min/30min的窗口,每次20个记录,…)。另一个逻辑与上面的计数方法相同。如果使用事件时间逻辑,则可以控制具有无序时间戳的记录。

root据您的用例,窗口方法可能已经足够了。如果您需要更好的延迟,或者您可以在有状态FlatMapFunction(最后10条记录)或stateful ProcessFunction中实现您的用例,它允许您访问时间戳和 watermark,以便更好地控制时间。

Flink的CEP库可以检测到更复杂的模式。


我来回答

写文章

提问题

面试题