如果我们将一个 returns Boolean 函数传递给 Flink CEP 的 where 子句,它会以分布式方式工作吗?

If we pass a function, which returns Boolean, into where clause of Flink CEP will it work in distributed manner?

我正在使用 Flink CEP 模块,想知道我是否将一个函数传递给 where 子句,这将返回布尔值,它是否会以分布式方式工作。

示例-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v))

上面的代码在条件简单的情况下作为 CEP 的 flink 作业提交时是否会以分布式方式工作?

Yuval 已经在评论中给出了正确答案,但我想对其进行扩展:

是的,您提供的任何功能都可以 运行 以分布式方式进行。首先,正如 Yuval 指出的那样,您的所有代码都会在提交作业时分布在计算集群上。

缺少的部分是你的工作本身也被分发了。如果您检查 API,您会在界面中看到它:

public Pattern<T, F> where(IterativeCondition<F> condition) { ...

模式需要一些条件。如果你查看它的定义,你可以看到以下内容

public abstract class IterativeCondition<T> implements Function, Serializable { ... }

所以你传递给 where 的东西必须是 Serializable。您的客户端可以序列化您的整个作业,包括所有函数定义,并将其发送到 JobManager,后者将其分发到不同的 TaskManager。因为基础设施的每一部分也有你的工作 jar,它可以反序列化包括你的功能在内的工作。反序列化还意味着它创建函数的副本,这是分布式执行所必需的。