当前位置: 首页 > 知识库问答 >
问题:

Flink Core和Flink CEP在功能方面有什么区别?

施茂
2023-03-14

在过去几天研究Flink CEP库时,我一直认为它没有为Flink的标准功能添加任何新的基本功能。Flink CEP的唯一目的似乎是通过清晰的语义和直观的代码结构简化事件处理。例如,Flink CEP只提供了5种事件匹配跳过语义。虽然这些语义对于很多情况可能已经足够了,但它可能无法解决具体问题,这让我们回到了普通的Flink。

测试用例是以下模式:

Emmit流中每对非重叠数字的警报(由“a”表示)

由图案表示:

Pattern.begin[EventType]("对", skipStrategy). place(new AlwaysTrueFunction()). time(2)

因此,对于像(在流中从左到右输入的数字)这样的输入,预期的输出将是a a,但5种跳过匹配策略都不会给出正确的结果:

No-skip: a a a a
Skip-to-next: a a a a
Skip-past-last-event: a a a a
Skip-to-first[1]: a a a a
Skip-to-last[1]: a a a a

虽然这些策略不能生成所需的模式,但可以使用带有ValueState计数器的RichFunction轻松制作,以确定何时应发出新警报,转换输入流中的事件流。

因此,我希望对这些问题有所了解:

>

使用CEP生成的模式比使用Flink标准数据流操作符生成的模式更有效(吞吐量/其他指标更高)?(如果可能的话,提供一些相关文章/论文/文档的链接)


共有1个答案

居京
2023-03-14

感谢您玩Flink CEP。

Flink CEP是Flink之上的一个库。因此,它没有添加任何不能使用vanilla Flink(ProcessFunctions等)实现的功能。事实上,在引擎盖下,它是作为一个特殊的操作员来实现的,该操作员正在检查与特定模式匹配的元素,它的许多功能甚至可能被实现为一个ProcessFunction(使用大量工具)。

也就是说,Flink CEP可能不会添加无法使用普通Flink实现的功能,但它增加了表现力,使某些用例更容易实现。其他API也是如此,例如Flink中的窗口API,您可以使用ProcessFunctions(周围有很多工具)实现它。

现在说到效率,答案是“视情况而定”。手工制作一个根据您的用例定制的特殊流程函数,并对您的工作负载进行所有可能的优化,这比FlinkCEP更有效,因为后者是一个通用库。如果您有专业知识和时间,那么最佳的解决方案将始终是同时使用CEP和vanilla Flink实现POC,并为您的案例选择最有效的方法。

 类似资料:
  • 问题内容: 在支持哪些正则表达式方面,perl和java有什么区别? 这个问题仅针对正则表达式,并且特别排除 了 正则表达式的用法差异(即使用正则表达式的可用函数/方法)以及语言之间的语法差异,例如Java要求转义反斜杠等。 特别令人感兴趣的是Java对可变长度后向查找的部分/偶然支持。 问题答案: “与Perl 5的比较”部分列出了许多差异。例如,Java不支持条件正则表达式。为此,您需要使用一

  • 问题内容: 之间有什么区别 和 如果我错了,请忽略此问题。 问题答案: 在第一个线程中,只有一个线程一次可以执行整个方法,而在第二个线程中,如果不将 其 用作参数,则只有一个线程可以执行该同步块。 这是它的副本。使用同步方法而不是同步块是否有优势?

  • 1vw=1%,那么如果它们是100%可互换的,为什么它们都存在呢?我觉得%依赖于包装标签的大小,但vh总是依赖于窗口大小,无论包装标签的大小。谢谢,

  • 我们的团队正计划从 Spring CloudNetflix功能区到Spring Cloud LoadBalancer,并使用spring-cloud d-kubernetes作为发现客户端。 使用Spring Cloud Gateway而不是Zuul 和Resilience4j而不是Hystrix。 需要进行哪些必要的更改,我们是否需要更改等效属性。您能帮助我们从哪里开始吗?

  • E立方管理平台作为一个信息系统设计与运行平台,它的功能表现在三个方面。一是信息系统设计,二是信息系统运行支持,三是系统管理。 一、信息系统设计功能 1) 把Excel文件定义为模板,使得用户可以按照模板填写Excel表单。 2) 把模版上的单元格或单元区域定义为数据r项,数据项组合成数据表,使得用户按模板填制的表单内容可以保存到数据库中去。 3) 定义各种数据规范,提高用户输入效率、保证输入信息的

  • 我一直认为函数和方法是一样的,直到我通过“Swift编程语言”电子书学习Swift。我发现我不能使用调用我在类中声明的函数,如下面屏幕快照中的电子书所示: 我收到一个错误,说“调用中缺少参数标签'day:'”,根据这个屏幕快照: 代码如下:-