繁体   English   中英

在 Apache Flink Broadcast stream 中应用基于 window 的规则

[英]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,为每个相关规则递增计数器。 当计时器触发时,您会找到相关规则,将计数器与阈值进行比较,采取适当的措施并清除这些计数器。

需要记住的一些潜在并发症:

  1. 此实现要求您使用 keyBy 对keyBy进行分区,以便您可以使用 MapState 和计时器。
  2. 广播 stream 不能有与之关联的定时器,因此定时器必须由处理键控 stream 的processElement方法管理。
  3. Flink 只允许一个给定键和给定时间戳的计时器。 因此,如果您必须处理需要同时触发两个规则的情况,请小心。
  4. 如果事件可能无序到达,则您需要先按时间戳对 stream 进行排序,或者允许同时打开多个 windows。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM