监视一系列事件一段时间,然后做出决定
Monitor series of event for some time and then take a decision
我是 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 的 window 运算符勾勒出一些解决方案。请注意,还有其他方法可以使用自定义函数/运算符来执行此操作,这些方法可以提供更低的延迟和更少的状态来处理,但需要更多的用户定义代码。
- 当温度为90度连续记录10次时:
这可以使用滑动 window 来完成,该滑动 window 收集十条记录并逐条滑动。您应该将 window 函数实现为 ReduceFunction,它立即将 window 的记录组合成一个布尔值,该值编码所有温度是否 > 90 度或是否不是。这会将 space 要求减少到每个 window 一条记录,即一次 10 条记录(因为同时计算了 10 windows)。请注意,计数 windows 可能会有问题,因为在分布式流处理器中排序有点难以推理。
- 当最后 10 分钟温度超过 90 度时:
这可以使用滑动时间 window 来完成,例如,window 超过 10 分钟,然后滑动一分钟。这将为您提供 1 分钟的解决方案,即,它将每分钟检查一次最近 10 分钟的温度。同样,每个 window 都有一条记录(一次 10 条,持续 10 分钟/1 分钟 window,一次 20 条,持续 10 分钟/30 秒 window,...) .其他逻辑与上面的计数方法相同。如果使用事件时间逻辑,则可以控制时间戳乱序的记录。
根据您的用例,window 方法可能就足够了。如果您需要更好的延迟或者您也可以在有状态 FlatMapFunction
(最后 10 条记录)或有状态 ProcessFunction
中实现您的用例,这使您可以访问时间戳和水印以更好地控制时间。
Flink 的 CEP 库可以检测更复杂的模式。
我是 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 的 window 运算符勾勒出一些解决方案。请注意,还有其他方法可以使用自定义函数/运算符来执行此操作,这些方法可以提供更低的延迟和更少的状态来处理,但需要更多的用户定义代码。
- 当温度为90度连续记录10次时:
这可以使用滑动 window 来完成,该滑动 window 收集十条记录并逐条滑动。您应该将 window 函数实现为 ReduceFunction,它立即将 window 的记录组合成一个布尔值,该值编码所有温度是否 > 90 度或是否不是。这会将 space 要求减少到每个 window 一条记录,即一次 10 条记录(因为同时计算了 10 windows)。请注意,计数 windows 可能会有问题,因为在分布式流处理器中排序有点难以推理。
- 当最后 10 分钟温度超过 90 度时:
这可以使用滑动时间 window 来完成,例如,window 超过 10 分钟,然后滑动一分钟。这将为您提供 1 分钟的解决方案,即,它将每分钟检查一次最近 10 分钟的温度。同样,每个 window 都有一条记录(一次 10 条,持续 10 分钟/1 分钟 window,一次 20 条,持续 10 分钟/30 秒 window,...) .其他逻辑与上面的计数方法相同。如果使用事件时间逻辑,则可以控制时间戳乱序的记录。
根据您的用例,window 方法可能就足够了。如果您需要更好的延迟或者您也可以在有状态 FlatMapFunction
(最后 10 条记录)或有状态 ProcessFunction
中实现您的用例,这使您可以访问时间戳和水印以更好地控制时间。
Flink 的 CEP 库可以检测更复杂的模式。