如果我们把一个返回布尔值的函数传递到flink cep的where子句中,它会以分布式方式工作吗?

kyks70gy  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(251)

我使用的是flink cep模块,我想知道是否将一个函数传递给where子句,它将返回boolean,它是否以分布式方式工作。
示例-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v)) 上述代码是否会以分布式的方式工作时,提交为简单条件的cepFlink工作。

5vf7fwbs

5vf7fwbs1#

尤瓦尔在评论中已经给出了正确的答案,但我想进一步说明:
是的,您提供的任何函数都可以以分布式方式运行。首先,正如yuval指出的,在提交作业时,所有代码都会分布在计算集群上。
缺少的一点是,你的工作本身也得到了分配。如果您检查api,就会在接口中看到它:

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

模式需要一些条件。如果你看一下它的定义,你会发现

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

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

相关问题