[英]Applying window based rules in Apache Flink Broadcast stream
我在 Apache Flink 的 BroadcastStream 中有一组规则。 我可以将新规则应用于我的 stream 事件。 但我无法弄清楚如果我的规则像
rule 1> alert when count of event a is greater than 5 in a window of 5 mins
rule 2> alert when count of event a is greater than 4 in a window of 15 mins
我是flink的新手。 我无法弄清楚这一点。
基于 flink-sql 或 flink-cep 的应用程序将无法执行此操作,因为这些库只能处理在编译作业时定义的规则。 您需要为每条新规则开始一项新工作,这可能不符合您的要求。
如果您想要一个可以处理在作业运行时提供的动态规则集的单个作业,您必须自己构建它。 您可以使用KeyedBroadcastProcessFunction
来执行此操作(听起来您已经开始尝试了)。
这是一个可能的实现的草图:
您可以使用 KeyedBroadcastProcessFunction 中的键控 state 来跟踪每个 window 中的当前计数。 如果规则可以通过时间间隔和计数阈值来表征,那么您可以使用MapState
,其中键是规则 ID,map 中的值是该规则的当前计数。 您可以为每个 window 结束时触发的每个规则设置一个计时器。
随着事件的到来,您遍历基于规则的 map,为每个相关规则递增计数器。 当计时器触发时,您会找到相关规则,将计数器与阈值进行比较,采取适当的措施并清除这些计数器。
需要记住的一些潜在并发症:
keyBy
进行分区,以便您可以使用 MapState 和计时器。processElement
方法管理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.