繁体   English   中英

如何使用 flink 运行多个复杂规则

[英]How to run multiple complex rules with flink

这是我们的用例:我们计划在具有大量规则(1000 条)的 flink 之上构建一个基于规则的引擎。 规则可以是无状态的或有状态的。 示例无状态规则是:A.id = 3 && A.name = 'abc' || A.color = 红色。 示例状态规则是:A 是 event.id =3,B 是 event.name = 'abc',C 是 event.color = red 我们正在寻找模式 AB*C 随着时间 window 的 1 小时。

现在我们尝试为此目的使用 flink CEP,但由于线程过多,程序崩溃了。 解释是:每次应用 CEP.pattern 都会在图中创建一个新的运算符,而 flink 不能支持图中那么多的顶点。

其他方法可能是在 flink 中使用 processFunction,但仍然要在事件 stream 上运行规则,您必须使用某种 CEP 或编写自己的 CEP。

我的问题是,是否有人对如何实现这一目标有任何其他建议? 任何其他与 flink 集成并更好地工作的 CEP(siddhi、jasper、drools)? 或者我们认为这是完全错误的,实现这一点的唯一方法是通过 keyBy ruleID,以便每个任务槽运行 1 个规则(但在这种方法中,所有数据都发送到所有槽)? 任何经验/建议都会有所帮助。

您可能会看看siddhi CEP 它有一个flink 连接器,但我不确定它的维护情况如何。

今年也有关于 flink forward 的演讲

否则,您可能需要使用广播 state 模式自行实现。

与常规编程库不同,所有大数据处理引擎都为查询和程序创建新的管道和运算符(如 Spark 和 Flink)。

我们在规则引擎中遇到了类似的问题,我们必须将类似的规则与基于参数的规则通用化。 在那种风格中,我们有一些管道对规则应用规则限制。 我们使用的是我不能在这里提及的自制软件。 我想你也可以在这里采取类似的方法。

暂无
暂无

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

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