我使用的是flink cep模块,我想知道是否将一个函数传递给where子句,它将返回boolean,它是否以分布式方式工作。
示例-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v))
上述代码是否会以分布式的方式工作时,提交为简单条件的cepFlink工作。
我使用的是flink cep模块,我想知道是否将一个函数传递给where子句,它将返回boolean,它是否以分布式方式工作。
示例-: val pattern= Pattern.start("begin").where(v=>booleanReturningFunction(v))
上述代码是否会以分布式的方式工作时,提交为简单条件的cepFlink工作。
1条答案
按热度按时间5vf7fwbs1#
尤瓦尔在评论中已经给出了正确的答案,但我想进一步说明:
是的,您提供的任何函数都可以以分布式方式运行。首先,正如yuval指出的,在提交作业时,所有代码都会分布在计算集群上。
缺少的一点是,你的工作本身也得到了分配。如果您检查api,就会在接口中看到它:
模式需要一些条件。如果你看一下它的定义,你会发现
所以你传递给
where
必须是Serializable
. 您的客户机可以序列化整个作业(包括所有函数定义),并将其发送给jobmanager,后者将其分发给不同的TaskManager。因为基础设施的每一部分都有作业jar,所以它可以反序列化作业,包括函数。反序列化还意味着它创建函数的副本,这是分布式执行所必需的。