am a flink初学者。
教程我看到的任何内容都关注非常简单的逻辑。就像温度在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
一个典型的问题, apache flink支持这种模式
我可以看到within x seconds
,但是没有什么比for x minutes / for x records
您当然可以用flink解决此类用例。
我将使用下面的Flink窗口操作员绘制一些解决方案。请注意,还有其他方法可以使用自定义功能/运算符来执行此操作,这些功能/运算符可以提供较低的延迟和更少的状态,但需要更多用户定义的代码。
- 连续10个连续记录的温度为90度时:
这可以使用滑动窗口来完成十个记录和幻灯片的滑动窗口。您应该将窗口函数实现为简单功能,该功能立即将窗口的记录结合到布尔值中,该值编码所有温度均为90度,或者如果不是一个温度。这将减少每个窗口的一个记录,即一次记录10个记录(因为同时计算了10个窗口)。请注意,计数窗口可能是有问题的,因为在分布式流处理器中订购很难推理。
- 在过去10分钟内温度超过90度时:
这可以使用滑动时间窗口,例如,在10分钟内滑动一分钟的窗口。这将为您提供1分钟的分辨率,即,它将检查最后10分钟的温度。同样,您将有一个记录每个窗口(一次为10分钟/1分钟的窗口10,一次为10分钟/30秒窗口,...)。另一个逻辑与上面的计数方法相同。如果您使用事件时间逻辑,则可以使用排序时间戳控制记录。
取决于使用情况,窗口方法可能就足够了。如果您需要更好的延迟或可以在状态的FlatMapFunction
(最后10个记录)或状态ProcessFunction
中实现用例
可以通过Flink的CEP库来检测更复杂的模式。